home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
INFOTEXT
/
INTERRUP.LZH
/
INTERRUP.TXT
Wrap
Text File
|
1989-11-07
|
137KB
|
3,285 lines
While you may want to remove the following header from this file for
your own use, please do not redistribute the file without it, so that
credit may be given where credit is due.
-----------------------------------------------------------
Last edited 12/5/87
This list is the result of the time and effort of a large number of people,
among them
Janet Jack January 1985 (original list)
J. Weaver Jr. January 1985
John Cooper February 1985
Skip Gilbrech February 1985
Bob Jack
Jim Kyle April 1985
John Ruschmeyer <ihnp4!vax135!petsd!moncol!john> August 1985
Bill Frolik <ihnp4!hplabs!hp-pcd!bill> August 1985
Ross M. Greenberg <greenber%timeinc.uucp@brl.arpa> August 1985
Dan Lanciani <ddl@harvard.*> TANDY function calls
Ralf Brown <ralf@cs.cmu.edu> INT 24h and DOS func 59h error codes
Dan Davison <dd@lanl.gov> DOS 3.3 function calls 11/87
Bill White <wwhite@teknowledge-vaxc.arpa> DOS 3.3 11/87
Richard Hargrove <killer!richardh@harvard.harvard.edu> EGA 11/87
Vincent Broman <broman@bugs.nosc.mil> Cordata BIOS/Minix 12/87
Information on the INT 10h functions supported by the EGA BIOS was derived
from the article "Graphic Enhancement" found in the April 1985 _PC Tech
Journal_, pages 58ff., and is marked with the string {ega}. jrh.
Information on functions unique to the Portable PC and the Convertible was
derived from a similar list compiled by David E. Powell, and added by
Ralf Brown on 11/14/87.
Information on LIM EMS 3.2 functions was derived from _Advanced_MSDOS_, by
Ray Duncan. Added by Ralf Brown 11/19/87.
Information on LIM EMS 4.0 functions was derived from the transcription of
the specification by Dick Flanagan and Ben Lomond. Added by Ralf Brown,
11/20/87
-----------------------------------------------------------
If you know any information which is not in this list, or which is
incorrect, please let me know!
Ralf Brown
Arpa: ralf@cs.cmu.edu
UUCP: {uunet,ucbvax,harvard}!cs.cmu.edu!ralf
BIT: ralf%cs.cmu.edu@cmuccvma
FIDO: Ralf Brown at 1:129/31 (more subject to change than the others)
-----------------------------------------------------------
INT 0 - DIVIDE ERROR
Automatically called at end of DIV or IDIV operation that results in
error. Normally set by DOS to display an error message and abort the
program.
-----------------------------------------------------------
INT 1 - SINGLE-STEP
Generated at end of each machine instruction if TF bit in FLAGS is set.
This is what makes the T command of DEBUG work for single-stepping. Is
not generated after MOV to segment register or POP of segment register
(unless you have a very early 8088 with a microcode bug).
-----------------------------------------------------------
INT 2 - NMI (Non Maskable Interrupt)
Generated by NMI signal in hardware. Used in IBM for memory parity
error trapping.
-----------------------------------------------------------
INT 3 - 1-BYTE INTERRUPT
Generated by opcode 0CCh. Similar to 8080's RST instruction. Generally
used to set breakpoints for DEBUG.
-----------------------------------------------------------
INT 4 - Overflow (internal interrupt)
Generated by INTO instruction if OF flag is set. If flag is not set,
INTO is effectively a NOP. Used to trap any arithmetic errors when
program is ready to handle them rather than immediately when they occur.
-----------------------------------------------------------
INT 5 - Print-Screen Key
Automatically called by keyboard scan when print-screen key is pressed.
Normally executes routine to print the screen, but may call any routine
that can safely be executed from inside the keyboard scanner. Status
and result byte for default handler is at address 0050:0000.
-----------------------------------------------------------
INT 5 - BOUND check failed (80286 internal interrupt)
-----------------------------------------------------------
INT 6 - Undefined Opcode (80286 internal interrupt)
-----------------------------------------------------------
INT 7 - No Math Unit Available (80286 protected-mode internal)
-----------------------------------------------------------
INT 8 thru 0F - Vectored Hardware Lines
In IBM, these 8 interrupts are generated in response to IRQ 0 through
IRQ 7 (if enabled via port 21h).
[Tandy 1000]
IRQ0 - timer interrupt
IRQ1 - keyboard interrupt
IRQ2 - EGA vertical retrace [fixed disk]
IRQ3 - serial port 2 (com2:)
IRQ4 - serial port 1 (com1:)
IRQ5 - fixed disk [60 Hz ram refresh]
(LPT2 on PC/AT)
IRQ6 - diskette interrupt
IRQ7 - PPI interrupt (lpt1:, lpt2:)
-----------------------------------------------------------
INT 8 - Double Fault (80286 protected-mode internal)
-----------------------------------------------------------
INT 9 - Math Unit Protection Fault (80286 protected-mode internal)
-----------------------------------------------------------
INT 0A - Invalid Task State Segment (80286 protected-mode internal)
-----------------------------------------------------------
INT 0B - Not Present (80286 protected-mode internal)
-----------------------------------------------------------
INT 0C - Stack Fault (80286 protected-mode internal)
-----------------------------------------------------------
INT 0D - General Protection Violation (80286 internal interrupt)
Called in real mode when an instruction attempts to access a word
operand located at offset 0FFFFh
-----------------------------------------------------------
INT 0E - Page Fault (80386 native-mode internal)
-----------------------------------------------------------
INT 10 - VIDEO - SET VIDEO MODE
AH = 0
AL = mode
0 = 40x25 B&W
1 = 40x25 color
2 = 80x25 B&W
3 = 80x25 color
4 = 320x200 graphics, 4 color
5 = 320x200 graphics, 4-tone gray scale
6 = 640x200 graphics, B&W
7 = monochrome
8 = 160x200 graphics, 16 color (PCjr/Tandy 1000)
9 = 320x200 graphics, 16 color(PCjr/Tandy 1000)
0Ah = 640x200 graphics, 4 color (PCjr/Tandy 1000)
0Bh = reserved (used internally by EGA BIOS)
0Ch = reserved (used internally by EGA BIOS)
0Dh = 320x200 graphics, 16 color (EGA)
0Eh = 640x200 graphics, 16 color (EGA)
0Fh = 640x350 graphics, monochrome (EGA)
10h = 640x350 graphics, 4 or 16 color (EGA)
11h = ???x??? graphics, ??? colors (VGA)
12h = ???x??? graphics, ??? colors (VGA)
13h = ???x??? graphics, ??? colors (VGA)
30h = ???x??? (AT&T 6300)
40h = 640x400 graphics (AT&T 6300)
60h = 400 line graphics+80 column text (Corona/Cordata BIOS v4.10+)
61h = 400 line graphics (Corona/Cordata BIOS v4.10+)
74h = 640x400 graphics (Toshiba 3100)
-----------------------------------------------------------
INT 10 - VIDEO - SET CURSOR CHARACTERISTICS
AH = 1
CH bits 5-6 = blink attribute
(00=normal, 01=invisible, 10 = slow, 11=fast)
CH bits 0-4 = start line for cursor in char. cell
CL bits 0-4 = end line for cursor in char. cell
-----------------------------------------------------------
INT 10 - VIDEO - SET CURSOR POSITION
AH = 2
DH,DL = row, column (0,0 = upper left)
BH = page number
0 in graphics modes
0-3 in modes 2&3
0-7 in modes 0&1
-----------------------------------------------------------
INT 10 - VIDEO - READ CURSOR POSITION
AH = 3
BH = page number
0 in graphics modes
0-3 in modes 2&3
0-7 in modes 0&1
Return: DH = row
DL = column
CH = cursor start line
CL = cursor end line
-----------------------------------------------------------
INT 10 - VIDEO - READ LIGHT PEN POSITION
AH = 4
Return: AH = 0: light pen switch not activated
AH = 1: light pen values in registers
DH = row of current position
DL = column of current position
CH = raster line (0-199) {ega} old graphics modes
CX = {ega} raster line (0-nnn) new graphics modes
BX = pixel column (0-319 or 0-639)
-----------------------------------------------------------
INT 10 - VIDEO - SELECT DISPLAY PAGE
AH = 5
AL =
0-7: new page value for modes 0 & 1
0-3: new page value for modes 2 & 3
80h: read CRT/CPU page registers [PCjr only]
81h: set CPU page register to value in BL [PCjr only]
82h: set CRT page register to value in BH [PCjr only]
83h: set both display registers [PCjr only]
{Corona/Cordata BIOS v4.10+}
0: set address of graphics bitmap buffer (video modes 60h,61h)
BX = segment of buffer
0Fh: get address of graphics bitmap buffer (video modes 60h,61h)
Return: BH = CRT page register (if AL >= 80h)
BL = CPU page register (if AL >= 80h)
DX = segment of graphics bitmap buffer (video modes 60h,61h; AL=0Fh)
-----------------------------------------------------------
INT 10 - VIDEO - SCROLL PAGE UP
AH = 6
AL = number of lines to scroll window (0 = blank whole window)
BH = attributes to be used on blanked lines
CH,CL = row,column of upper left corner of window to scroll
DH,DL = row,column of lower right corner of window
-----------------------------------------------------------
INT 10 - VIDEO - SCROLL PAGE DOWN
AH = 7
AL = number of lines to scroll window (0 = blank whole window)
BH = attributes to be used on blanked lines
CH,CL = row,column of upper left corner of window to scroll
DH,DL = row,column of lower right corner of window
-----------------------------------------------------------
INT 10 - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION
AH = 8
BH = display page
Return: AL = character
AH = attribute of character (alpha modes)
-----------------------------------------------------------
INT 10 - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POS
AH = 9
AL = character
BH = display page - alpha mode
BL = attributes of char (alpha modes) or color (graphics modes)
if bit 7 == 1 in graphics mode, character is xor'ed onto screen
CX = number of times to write character
-----------------------------------------------------------
INT 10 - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POS
AH = 0Ah
AL = character
BH = display page - alpha mode
BL = color of character (graphics mode)
CX = number of times to write character
{ega} in graphics modes, replication count in CX works correctly
only if all character written are contains on the same row
-----------------------------------------------------------
INT 10 - VIDEO - SET COLOR PALETTE
{ega} CGA-compatible modes
AH = 0Bh
BH = palette color ID
BL = color to be used with color ID
{ega} (graphics modes)
if BH == 0, BL contains background and border colors (0-15)
if BH == 1, BL contains palette being selected (0-1)
(text modes)
if BH == 0, BL contains border color (0-15) only
{ega} BL contains border color (0-15) and high-intensity
background color (16-31)
-----------------------------------------------------------
INT 10 - VIDEO - WRITE DOT ON SCREEN
AH = 0Ch
AL = color of dot (0/1 in mode 6, 0-3 in modes 4 and 5)
if bit 7 set, new color will be XORed with current pixel
DX = row (0 - 199)
CX = column (0 - 319 in modes 4/5, 0 - 639 in mode 6)
Note: video modes 4-6 only
-----------------------------------------------------------
INT 10 - VIDEO - READ DOT ON SCREEN
AH = 0Dh
CX = column (0 - 319 or 639)
DX = row (0 - 199)
Return: AL = color read
-----------------------------------------------------------
INT 10 - VIDEO - WRITE CHARACTER AND ADVANCE CURSOR (TTY WRITE)
AH = 0Eh
AL = character
BH = display page (alpha modes)
BL = foreground color (graphics modes)
-----------------------------------------------------------
INT 10 - VIDEO - GET CURRENT VIDEO MODE
AH = 0Fh
Return: AH = number of columns on screen
AL = current video mode
BH = current active display page
-----------------------------------------------------------
INT 10 - VIDEO - SET PALETTE REGISTERS (PCjr, TANDY 1000, {ega})
AH = 10h
AL = 0: set palette register
BL = palette register to set
BH = color value to store
AL = 1: set border color register
BH = color value to store
AL = 2: set all palette registers
ES:DX = pointer to 17-byte list
bytes 0-15 = values for palette regs. 0-15
byte 16 = value for border register
{ega}
AL = 3: toggle intensity/blinking bit
BL = 0: enable intensity
BL = 1: enable blink
-----------------------------------------------------------
INT 10 - Character generator functions {ega}
AH = 11h
The following functions will cause a mode set, completely resetting
the video environment, but without clearing the video buffer
AL = 00h, 10h: load user-specified patterns
ES:BP = pointer to user table
CX = count of patterns to store
DX = character offset into map 2 block
BL = block to load in map 2
BH = number of bytes per character pattern
AL = 01h, 11h: load ROM monochrome patterns (8 by 14)
BL = block to load
AL = 02h, 12h: load ROM 8 by 8 double-dot patterns
BL = block to load
AL = 03h: set block specifier
BL = block specifier
The routines called with AL=1x are designed to be called only
immediately after a mode set and are similar to the routines called
with AL=0x, except that:
Page 0 must be active.
Bytes/character is recalculated.
Max character rows is recalculated.
CRT buffer length is recalculated.
CRTC registers are reprogrammed as follows:
R09 = bytes/char-1 ; max scan line (mode 7 only)
R0A = bytes/char-2 ; cursor start
R0B = 0 ; cursor end
R12 = ((rows+1)*(bytes/char))-1 ; vertical display end
R14 = bytes/char ; underline loc
(*** BUG: should be 1 less ***)
The following functions are meant to be called only after a mode set:
AL = 20h: user 8 by 8 graphics characters (INT 1FH)
ES:BP = pointer to user table
AL = 21h: user graphics characters
ES:BP = pointer to user table
CX = bytes per character
BL = row specifier
0: user set - DL = number of rows
1: 14 rows
2: 25 rows
3: 43 rows
AL = 22h: ROM 8 by 14 set
BL = row specifier
AL = 23h: ROM 8 by 8 double dot
BL = row specifier
AL = 30h: return information
BH = pointer specifier
0: INT 1Fh pointer
1: INT 44h pointer
2: ROM 8 by 14 character font pointer
3: ROM 8 by 8 double dot font pointer
4: ROM 8 by 8 DD font (top half)
5: ROM alpha alternate (9 by 14) pointer
Returns: ES:BP = specified pointer value
CX = bytes/character
DL = character rows on screen
-----------------------------------------------------------
INT 10 - Alternate function select {ega}
AH = 12h
BL = 10h: return EGA information
Returns:
BH = 0: color mode in effect (3Dx)
1: mono mode in effect (3Bx)
BL = 0: 64k bytes memory installed
1: 128k bytes memory installed
2: 192k bytes memory installed
3: 256k bytes memory installed
CH = feature bits
CL = switch settings
BL = 20h: select alternate print screen routine
-----------------------------------------------------------
INT 10 - WRITE STRING (PC/AT ONLY)
AH = 13h
AL = mode
bit 0: set in order to move cursor after write
bit 1: set if string contains alternating characters and attributes
BL = attribute if AL bit 1 clear
BH = display page number
DH,DL = row,column of starting cursor position
CX = length of string
ES:BP = pointer to start of string
-----------------------------------------------------------
INT 10 - LOAD LCD CHARACTER FONT (CONVERTIBLE ONLY)
AH = 14h
AL = 0 load user-specified font
ES:DI = pointer to character font
BH = number of bytes per character
BL = 0: load main font (block 0)
1: load alternate font (block 1)
CX = number of characters to store
DX = character offset into RAM font area
AL = 1 load system rom default font
BL = 0: load main font (block 0)
1: load alternate font (block 1)
AL = 2 set mapping of LCD high intensity attributes
BL = 0: ignore high intensity attribute
1: map high intensity to underscore
2: map high intensity to revrese video
3: map high intensity to selected alternate font
-----------------------------------------------------------
INT 10 - GET PHYSICAL DISPLAY PARAMETERS (CONVERTIBLE ONLY)
AH = 15h
Return: AX = alternate display adapter type
ES:DI = pointer to parameter table
word 0: monitor model number
1: vertical pixels per meter
2: horizontal pixels per meter
3: total vertical pixels
4: total horizontal pixels
5: horizontal pixel separation in micrometers
6: vertical pixel separation in micrometers
-----------------------------------------------------------
INT 10 - GET VIDEO RAM ADDRESS [TANDY 1000]
AH = 70h
Return: AX = segment address of the following
[BX] = offset address of green plane
[CX] = segment address of green plane
[DX] = segment address of red/blue plane
(red offset = 0, blue offset = 4000)
-----------------------------------------------------------
INT 10 - GET INCRAM ADDRESSES [TANDY 1000]
AH = 71h
Return: AX = segment address of the following
[BX] = segment address of INCRAM
[CX] = offset address of INCRAM
-----------------------------------------------------------
INT 10 - SCROLL SCREEN RIGHT [TANDY 1000]
AH = 72h
AL = number of columns blanked at left of window
0 = blank entire window
BH = attributes to be used on blank columns
CH,CL = row, column of upper left corner of window
DH,DL = row, column of lower right corner
----------------------------------------------------------
INT 10 - SCROLL SCREEN LEFT [TANDY 1000]
AH = 73h
AL = number of columns blanked at right of window
0 = blank entire window
BH = attributes to be used on blank columns
CH,CL = row, column of upper left corner of window
DH,DL = row, column of lower right corner
-----------------------------------------------------------
INT 10 - Get Video Buffer (TopView/DESQview/TaskView)
AH = FEh
ES:DI = segment:offset of assumed video buffer
Return: ES:DI = segment:offset of actual video buffer
-----------------------------------------------------------
INT 10 - Update Video Buffer (TopView/DESQview/TaskView)
AH = FFh
CX = number of sequential characters that have been modified
DI = offset of first character that has been modified
ES = segment of video buffer
-----------------------------------------------------------
INT 11 - EQUIPMENT DETERMINATION
Return: AX = "equipment flag" bits
0 diskette installed
1 8087 present
2,3 always = 11
4,5 initial video mode
01 = 40x25 COLOR
10 = 80x25 COLOR
11 = 80X25 IBM monochrome
6,7 number of diskette drives (only if bit 0 = 1)
00 = 1, 01 = 2
8 0 = dma present, 1= no dma on system (PCjr?)
9,10,11 number of RS232 cards
12 game I/O attached
13 serial printer installed (IBM-PCjr)
internal modem installed (Convertible)
14,15 number of printers
-----------------------------------------------------------
INT 12 - MEMORY SIZE
Return: AX = number of contiguous 1K blocks of memory
-----------------------------------------------------------
INT 13 - RESET DISK SYSTEM
AH = 0
-----------------------------------------------------------
INT 13 - STATUS OF DISK SYSTEM
AH = 1
Return: AL = status
00h = successful completion
01h = bad command
02h = address mark not found
03h = write attempted on write-protected disk
04h = sector not found
05h = reset failed (hard disk)
06h = diskette changed
07h = parameter act. failed (hard disk)
08h = DMA overrun
09h = DMA across 64K boundary
0Ah = bad sector detected (hard disk)
0Bh = bad track detected (hard disk)
0Ch = unsupported track
10h = bad CRC/ECC
11h = data ECC corrected
20h = controller failure
40h = seek failed
80h = time out
AAh = drive not ready (hard disk)
BBh = undefined error (hard disk)
-----------------------------------------------------------
INT 13 - READ SECTORS INTO MEMORY
AH = 2
AL = number of sectors to read
CH = track (for hard disk, bits 8,9 in high bits of CL)
CL = sector
DH = head
DL = drive
ES:BX = address of buffer to fill
Return: CF = set if error occurred
AH = status (see AH=1 above)
AL = number of sectors read
-----------------------------------------------------------
INT 13 - WRITES SECTORS FROM MEMORY
AH = 3
AL = number of sectors to write
CH = track (for hard disk, bits 8,9 in high bits of CL)
CL = sector
DH = head
DL = drive
ES:BX = address of buffer
Return: CF = set if error occurred
AH = status (see AH=1 above)
AL = number of sectors written
-----------------------------------------------------------
INT 13 - VERIFY SECTORS
AH = 4
AL = number of sectors to verify
CH = track (for hard disk, bits 8,9 in high bits of CL)
CL = sector
DH = head
DL = drive
Return: CF = set if error occurred
AH = status (see AH=1 above)
AL = number of sectors verified
-----------------------------------------------------------
INT 13 - FORMAT DISKETTE TRACK (FLOPPY)
AH = 5
AL = number of sectors to create on this track
CH = track
CL = sector
DH = head
DL = drive
ES:BX = pointer to array of 4-byte address fields
byte 1 = track
byte 2 = head
byte 3 = sector
byte 4 = bytes/sector 0=128, 1=256, 2=512, 3=1024
Return: CF set if error occurred
AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - FORMAT TRACK (HARD DISK)
AH = 5
AL = interleave value (XT only)
ES:BX = 512-byte format buffer
the first 2*(sectors/track) bytes contain F,N for each sector
F = 00 for good sector, 80h for bad sector
N = sector number
CH = cylinder number (bits 8,9 in high bits of CL)
CL = sector number
DH = head
DL = drive
Return: AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - FORMAT TRACK AND SET BAD SECTOR FLAGS (XT, PORTABLE ONLY)
AH = 6
AL = interleave value (XT only)
ES:BX = 512-byte format buffer
the first 2*(sectors/track) bytes contain F,N for each sector
F = 00 for good sector, 80h for bad sector
N = sector number
CH = cylinder number (bits 8,9 in high bits of CL)
CL = sector number
DH = head
DL = drive
Return: AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - FORMAT DRIVE STARTING AT GIVEN TRACK (XT, PORTABLE ONLY)
AH = 7
AL = interleave value (XT only)
ES:BX = 512-byte format buffer, see AH=6 above
CH = cylinder number (bits 8,9 in high bits of CL)
CL = sector number
DH = head
DL = drive
Return: AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - GET CURRENT DRIVE PARAMETERS (PC/XT and PC/AT)
AH = 8
DL = DRIVE NUMBER
Return: CF set on error
AH = status code (see AH=1 above)
DL = number of consecutive acknowledging drives
DH = maximum value for head number
CL = maximum value fo sector number
CH = maximum value for cylinder number
-----------------------------------------------------------
INT 13 - INITIALIZE TWO FIXED DISK BASE TABLES (PC/AT ONLY)
AH = 9
Return: CF set on error
AH = status code (see AH=1 above)
INT 41h points to table for drive 0
INT 46h points to table for drive 1
-----------------------------------------------------------
INT 13 - READ LONG (PC/AT ONLY)
AH = 0Ah
DL = drive ID
DH = head
CH = cylinder (bits 8,9 in high bits of CL)
CL = sector
ES:BX = pointer to buffer to fill
Return: CF set on error
AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - WRITE LONG (PC/AT ONLY)
AH = 0Bh
DL = drive ID
DH = head
CH = cylinder (bits 8,9 in high bits of CL)
CL = sector
ES:BX = pointer to buffer containing data
Return: CF set on error
AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - SEEK TO CYLINDER (PC/XT and PC/AT)
AH = 0Ch
DL = drive ID
DH = head
CH = cylinder (bits 8,9 in high bits of CL)
Return: CF set on error
AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - ALTERNATE DISK RESET (PC/XT and PC/AT)
AH = 0Dh
DL = drive ID
Return: CF set on error
AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - READ SECTOR BUFFER (XT, PORTABLE ONLY)
AH = 0Eh
AL = number of sectors
CH = cylinder (bits 8,9 in top two bits of CL)
CL = sector number
DH = head number
DL = drive number
ES:BX = pointer to buffer
Return: AL = number of sectors actually transferred
AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - WITE SECTOR BUFFER (XT, PORTABLE ONLY)
AH = 0Fh
AL = number of sectors
CH = cylinder (bits 8,9 in top two bits of CL)
CL = sector number
DH = head number
DL = drive number
ES:BX = pointer to buffer
Return: AL = number of sectors actually transferred
AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - TEST FOR DRIVE READY (PC/AT ONLY)
AH = 10h
DL = drive ID
Return: CF set on error
AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - RECALIBRATE DRIVE (PC/XT and PC/AT)
AH = 11h
DL = drive ID
Return: CF set on error
AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - CONTROLER RAM DIAGNOSTIC (XT, PORTABLE ONLY)
AH = 12h
Return: AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - DRIVE DIAGNOSTIC (XT, PORTABLE ONLY)
AH = 13h
Return: AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - CONTROLLER DIAGNOSTICS (PC/AT ONLY)
AH = 14h
Return: CF set on error
AH = status code (see AH=1 above)
-----------------------------------------------------------
INT 13 - GET DISK TYPE (PC/AT ONLY)
AH = 15h
DL = drive ID
Return: AH = disk type
0 = disk not there
1 = floppy, no change detection present
2 = floppy with change detection
3 = fixed disk
CX:DX = number of 512-byte sectors
-----------------------------------------------------------
INT 13 - CHANGE OF DISK STATUS (PC/AT ONLY)
AH = 16h
DL = drive to check
Return: AH = disk change status
0 = no disk change
6 = disk changed
-----------------------------------------------------------
INT 13 - SET DISK TYPE (PC/AT ONLY)
AH = 17h
AL = disk type
00 = no disk
01 = regular disk in regular drive
02 = regular disk in high-capacity drive
03 = high-capacity disk in high-capacity drive
DL = drive ID
-----------------------------------------------------------
INT 13 - SET MEDIA TYPE FOR FORMAT (PORTABLE? CONVERTIBLE? XT286?)
AH = 18h
DL = drive number
CH = lower 8 bits of number of tracks
CL = sectors per track (bits 0-5)
top 2 bits of number of tracks (bits 6,7)
Return: AH = 00h requested combination supported
01h function not available
0Ch not supported or druve type unknown
80h there is no disk in the drive
ES:DI = pointer to 11-byte parameter table
-----------------------------------------------------------
INT 13 - PARK FIXED DISK HEADS (XT MODEL 286 ONLY)
AH = 19h
-----------------------------------------------------------
INT 14 - SERIAL I/O - INITIALIZE USART
AH = 0
AL = initializing parameters
7 - 6 - 5 4 - 3 2 1 - 0
-BAUD RATE- PARITY STOP WORD
BITS LENGTH
000 110 BD 00 none 0-1 10 - 7
001 150 BD 01 odd 1-2 11 - 8
010 300 BD 11 even
011 600 BD
100 1200 BD
101 2400 BD
110 4800 BD
111 9600 BD (4800 ON PCjr)
DX = port number
Return: AX port status--see below
-----------------------------------------------------------
INT 14 - SERIAL I/O - TRANSMIT CHARACTER
AH = 1
AL = character
DX = port number
Return: AH = RS-232 status code bits
0: data ready
1: overrun error
2: parity error
3: framing error
4: break detected
5: transmission buffer register empty
6: transmission shift register empty
7: time out--if set, other bits invalid
AL = modem status bits
0: delta Clear-To-Send
1: delta Data-Set-Ready
2: trailing edge of ring detected
3: change, receive line signal detected
4: Clear-To-Send
5: Data-Set-Ready
6: ring detected
7: receive line signal detected
-----------------------------------------------------------
INT 14 - SERIAL I/O - RECEIVE CHARACTER
AH = 2
Return: AL = character received
AH = RS-232 status code (see above)
-----------------------------------------------------------
INT 14 - SERIAL I/O - GET USART STATUS
AH = 3
Return: AH = RS-232 status code (see above)
AL = modem status code (see above)
-----------------------------------------------------------
INT 14 - EXTENDED INITIALIZE (CONVERTIBLE?)
AH = 4
AL = break status
0 if break
1 if no break
BH = parity
0 no parity
1 odd parity
2 even parity
3 stick parity odd
4 stick parity even
BL = number of stop bits
0: one stop bit
1: two stop bits (1.5 if 5 bit word length)
CH = word length
0: 5 bits
1: 6 bits
2: 7 bits
3: 8 bits
CL = baud rate
0: 110
1: 150
2: 300
3: 600
4: 1200
5: 2400
6: 4800
7: 9600
8: 19200
Return: AL = modem status (see above)
AH = line control status (see above)
-----------------------------------------------------------
INT 14 - EXTENDD COMMUNICATION PORT CONTROL (CONVERTIBLE?)
AH = 5
AL = 0 read modem control register
Return: BL = modem control register (see below)
AH = status
AL = 1 write modem control register
BL = modem control register
bit 0: data terminal ready
bit 1: request to send
bit 2: OUT1
bit 3: OUT2
bit 4: LOOP
bits 5-7 reserved
Return: AH = status
-----------------------------------------------------------
INT 15 - TURN ON CASSETTE MOTOR
AH = 0
-----------------------------------------------------------
INT 15 - TURN OFF CASSETTE MOTOR
AH = 1
-----------------------------------------------------------
INT 15 - READ DATA BLOCKS FROM CASSETTE
AH = 2
CX = count of bytes
ES:BX = pointer to data area
Return: CF set on error
DX = count of bytes read
ES:BX = pointer past last byte read
-----------------------------------------------------------
INT 15 - WRITE DATA BLOCKS TO CASSETTE
AH = 3
CX = count of bytes to write
ES:BX = pointer to data area
Return: ES:BX = pointer past last byte written
-----------------------------------------------------------
INT 15 - DESQview/TopView/TaskView - Give up CPU time
AX = 1000h
Return: after other process(es) run
-----------------------------------------------------------
INT 15 - DESQview/TopView/TaskView - Get Version
AX = 1022h
BX = 0
Return: BX nonzero, TopView or compat loaded
TaskView returns BX = 0001h
-----------------------------------------------------------
INT 15 - DESQview/TopView/TaskView commands
AH = 11h
AL = various
-----------------------------------------------------------
INT 15 - DESQview/TopView/TaskView commands
AH = 12h
AL = various
-----------------------------------------------------------
INT 15 - PRINT.COM - Internal
AH = 20h
AL = subfunction
00h ???
01h ???
Note: sets or resets some flags which affect what PRINT does when it tries
to access the disk
-----------------------------------------------------------
INT 15 - READ/MODIFY PROFILES (CONVERTIBLE ONLY)
AH = 40h
AL = subfunction
0: get system profile in CX and BX
1: set system profile from CX and BX
2: get internal modem profile in BX
3: set internal modem profile from BX
-----------------------------------------------------------
INT 15 - WAIT ON EXTERNAL EVENT (CONVERTIBLE ONLY)
AH = 41h
AL = condition type
bits 0-2: condition to wait for
0 = any external event
1 = compare and return if equal
2 = compare and return if not equal
3 = test and return if not zero
4 = test and return if zero
bit 3: reserved
bit 4: 1=port address, 0=user byte
bits 5-7: reserved
BH = condition compare or mask value
BL = timeout value times 55 milliseconds
0 means no timeout
DX = I/O port address if AL bit 4 set
ES:DI = pointer to user byte if AL bit 4 clear
-----------------------------------------------------------
INT 15 - REQUEST SYSTEM POWER OFF (CONVERTIBLE ONLY)
AH = 42h
AL = 0 to use system profile
1 to foce suspend regardless of system profile
-----------------------------------------------------------
INT 15 - READ SYSTEM STATUS (CONVERTIBLE ONLY)
AH = 43h
Return: AL = status bits
bit 0: LCD detached
bit 1: reserved
bit 2: RS232/parallel adapter powered on
bit 3: internal modem powered on
bit 4: power activated by alarm
bit 5: standby power lost
bit 6: extern apower in use
bit 7: power low
-----------------------------------------------------------
INT 15 - (DE)ACTIVATE INTERNAL MODEM POWER (CONVERTIBLE ONLY)
AH = 44h
AL = 0 to power off
1 to power on
-----------------------------------------------------------
INT 15 - KEYBOARD INTERCEPT (CONVERTIBLE ONLY)
AH = 4Fh
AL = scan code
CF set
Return: AL = scan code
CF set
(Called by INT 9 handler to translate scan codes)
-----------------------------------------------------------
INT 15 - DEVICE OPEN (PC/AT ONLY)
AH = 80h
BX = device ID
CX = process type
-----------------------------------------------------------
INT 15 - DEVICE CLOSE (PC/AT ONLY)
AH = 81h
BX = device ID
CX = process type
-----------------------------------------------------------
INT 15 - DEVICE PROGRAM TERMINATE (PC/AT ONLY)
AH = 82h
BX = device ID
-----------------------------------------------------------
INT 15 - EVENT WAIT (PC/AT ONLY)
AH = 83h
AL = SUBSERVICE
0 = set interval
1 = cancel
ES:BX = pointer to event flag (bit 7 set when interval expires)
CX,DX = number of microseconds to wait (only accurate to 977 us)
Return: CF set if function already busy
-----------------------------------------------------------
INT 15 - READ JOYSTICK SWITCH SETTINGS (PC/AT ONLY)
AH = 84h
DX = 0
Return: AL = switch settings (bits 7-4)
-----------------------------------------------------------
INT 15 - READ JOYSTICK INPUTS (PC/AT ONLY)
AH = 84h
DX = 1
Return: AX = A(x) value
BX = A(y) value
CX = B(x) value
DX = B(y) value
-----------------------------------------------------------
INT 15 - SYSTEM REQUEST KEY PRESS (PC/AT ONLY)
AH = 85h (called by keyboard decode routine)
Return: AL = 00 press
AL = 01 release
-----------------------------------------------------------
INT 15 - WAIT (PC/AT AND AFTER)
AH = 86h
CX,DX = number of microseconds to wait (only accurate to 977 us)
-----------------------------------------------------------
INT 15 - EXTENDED MEMORY - BLOCK MOVE (286/386 machines only)
AH = 87h
CX = number of words to move
ES:SI = pointer to global descriptor table
offset 0h null descriptor
8h uninitialized, will be made into GDT descriptor
10h descriptor for source of move
18h descriptor for destination of move
20h uninitialized, used by BIOS
28h uninitialized, will be made into SS descriptor
-----------------------------------------------------------
INT 15 - EXTENDED MEMORY - GET MEMORY SIZE (286/386 machines only)
AH = 88h
Return: AX = memory size
-----------------------------------------------------------
INT 15 - SWITCH TO VIRTUAL MODE (PC/AT ONLY)
AH = 89h
BL = interrupt number of IRQ0 (IRQ1-7 use next 7 interrupts)
BH = interrupt number of IRQ8 (IRQ9-F use next 7 interrupts)
DS:SI = pointer to GDT for protected mode
offset 0h null descriptor
8h GDT descriptor
10h IDT descriptor
18h DS
20h ES
28h SS
30h CS
38h uninitialized, used to build descriptor for BIOS CS
CX = offset into protected-mode CS to jump to
Return: CF set on error
AH = 0FFh error enabling address line 20
-----------------------------------------------------------
INT 15 - DEVICE BUSY LOOP (PC/AT ONLY)
AH = 90h
AL = TYPE CODE
00h: disk
01h: diskette
02h: keybaord
80h: network (ES:BX = NCB)
FCh: disk reset
FDh: diskette motor start
FEh: printer
Return: CF set if wait time satisfied
-----------------------------------------------------------
INT 15 - SET FLAG AND COMPLETE INTERRUPT
AH = 91h
AL = type code, see AH=90h above
-----------------------------------------------------------
INT 15 - GET SYSTEM CONFIGURATION (XT after 1/10/86, PC Conv, XT286, PS/2)
AH = C0h
Return: CF = 1 if BIOS doesn't support call
ES:BX pointer to ROM table
byte_count dw ? ; number of bytes following
model db ? ; PC=ff, XT=fe or fb, PCjr = fd, etc, etc
submodel db ? ; distingushes between AT and XT/286, etc.
BIOS_rev db ? ; 0 for first release, 1 for 2nd, etc.
featbyte db ? ; 80h = DMA channel 3 used by hd BIOS
; 40h = 2nd 8259 installed
; 20h = Real-Time Clock installed
; 10h = INT 15h called upon INT 9h
; 8h = wait for external event supported
; 4h = extended BIOS area allocated at 640K
; 2h = bus is Micro Channel instead of PC
; 1h reserved
-----------------------------------------------------------
INT 15 - DESQview ? - ???
AH = C2h
AL = subfunction
00h ???
BH = ???
01h set something to default values
02h ???
BH = ???
03h ???
BH = ???
04h points to RET instruction
05h same as 01h, but also takes input value in BH
BH = ???
06h ???
BH = 01h or 02h stored, otherwise ignored
07h ???
ES:BX = pointer to ???
Return: AL = 00h
Note: the values in BH for those functions that take it as input are stored
in different locations for each subfunction
-----------------------------------------------------------
INT 15 - DESQview (TopView?) - ???
AH = 0DEh
-----------------------------------------------------------
INT 16 - KEYBOARD I/O - READ CHAR FROM BUFFER - WAIT IF EMPTY
AH = 0
Return: AH = scan code
AL = character
-----------------------------------------------------------
INT 16 - KEYBOARD I/O - CHECK BUFFER - DO NOT CLEAR
AH = 1
Return: ZF = 0 character in buffer
AH = scan code
AL = character
ZF = 1 no character in buffer
-----------------------------------------------------------
INT 16 - KEYBOARD I/O - GET SHIFT STATUS
AH = 2
AL = shift status bits
0 = right shift key depressed
1 = left shift key depressed
2 = CTRL depressed
3 = ALT depressed
4 = SCROLL LOCK active
5 = NUM LOCK active
6 = CAPS LOCK active
7 = INSERT state active
-----------------------------------------------------------
INT 16 - KEYBOARD I/O - SET DELAYS (PCjr, AT, PS/2)
AH = 3
AL = 0: reset typematic (PCjr)
AL = 1: increase initial delay (PCjr)
AL = 2: increase continuing delay (PCjr)
AL = 3: increase both delays (PCjr)
AL = 4: turn off typematic (PCjr)
AL = 5: Set typematic rate (AT or PS/2)
BH = 00 - 03 for delays of 250ms, 500ms, 750ms, or 1s
BL = 00 - 1F for typematic rates of 30cps down to 2cps
-----------------------------------------------------------
INT 16 - KEYBOARD I/O - KEYCLICK (PCjr ONLY)
AH = 4
AL = 0: click off
AL = 1: click on
-----------------------------------------------------------
INT 16 - KEYBOARD - Write to keyboard buffer (AT or PS/2 with enhanced kbd)
AH = 5
CH = scan code
CL = character
Return: AL = 1 if buffer full
-----------------------------------------------------------
INT 16 - KEYBOARD - Get enhanced keystroke (AT or PS/2 with enhanced kbd)
AH = 10h
Return: AH = scan code
AL = character
-----------------------------------------------------------
INT 16 - KEYBOARD - Check enhanced keystroke (AT or PS/2 with enhanced kbd)
AH = 11h
Return: ZF = 0 if keystroke available
AH = scan code \ meaningless if ZF = 1
AL = character /
ZF = 1 if kbd buffer empty
-----------------------------------------------------------
INT 16 - KEYBOARD - Get enhanced shift flags (AT or PS/2 with enhanced kbd)
AH = 12h
Return: AL (same as for AH=02)
bit 7: Ins ON
bit 6: CapsLock ON
bit 5: NumLock ON
bit 4: ScrollLock ON
bit 3: Either ALT key down
bit 2: Either CTRL key down
bit 1: Left shift key down
bit 0: Right shift key down
AH
bit 7: SysReq key down
bit 6: CapsLock key down
bit 5: NumLock key down
bit 4: ScrollLock key down
bit 3: Right Alt key down
bit 2: Right Ctrl key down
bit 1: Left Alt key down
bit 0: Right Alt key down
-----------------------------------------------------------
INT 17 - OUTPUT CHARACTER TO PRINTER
AH = 0
AL = character
Return: AH = status bits
0 = time out
1 = unused
2 = unused
3 = I/O error
4 = selected
5 = out of paper
6 = acknowledge
7 = not busy
-----------------------------------------------------------
INT 17 - INITIALIZE PRINTER
AH = 1
Return: AH = status (see above)
-----------------------------------------------------------
INT 17 - STATUS OF PRINTER
AH = 2
Return: AH = status (see above)
-----------------------------------------------------------
INT 18 - TRANSFER TO ROM BASIC
causes transfer to ROM-bases BASIC (IBM-PC)
often reboots a compatible; often has no effect at all
-----------------------------------------------------------
INT 19 - DISK BOOT
causes reboot of disk system (no memory test performed)
-----------------------------------------------------------
INT 1A - GET TIME OF DAY
AH = 0
Return: CX = high (most signif.) portion of clock count
DX = low (least signif.) portion of clock count
AL = 0 if clock was read or written (via AH=0,1)
within the current 24-hour period
Otherwise, AL > 0
-----------------------------------------------------------
INT 1A - SET TIME OF DAY
AH = 1
CX = high (most signif.) portion of clock count
DX = low (least signif.) portion of clock count
-----------------------------------------------------------
INT 1A - READ REAL TIME CLOCK (PC/AT ONLY)
AH = 2
Return: CH = hours
CL = minutes
DH = seconds
-----------------------------------------------------------
INT 1A - SET REAL TIME CLOCK (PC/AT ONLY)
AH = 3
CH = hours
CL = minutes
DH = seconds
DL = 1, if daylight savings; 0 if standard time
-----------------------------------------------------------
INT 1A - READ DATE FROM REAL TIME CLOCK (PC/AT ONLY)
AH = 4
Return: DL = day
DH = month
CL = year
CH = century (19 or 20)
-----------------------------------------------------------
INT 1A - SET DATE IN REAL TIME CLOCK (PC/AT ONLY)
AH = 5
DL = day
DH = month
CL = year
CH = century (19 or 20)
-----------------------------------------------------------
INT 1A - SET ALARM (PC/AT ONLY)
AH = 6
CH = hours
CL = minutes
DH = seconds
Return: CF set if alarm already set or clock inoperable
INT 4Ah will be called when alarm goes off
-----------------------------------------------------------
INT 1A - RESET ALARM (PC/AT ONLY)
AH = 7
-----------------------------------------------------------
INT 1A - SET RTC ACTIVATED POWER ON MODE (CONVERTIBLE ONLY)
AH = 8
CH = hours in BCD
CL = minutes in BCD
DH = seconds in BCD
-----------------------------------------------------------
INT 1A - READ RTC ALARM TIME AND STATUS (CONVERTIBLE ONLY)
AH = 9
Return: CH = hours in BCD
CL = minutes in BCD
DH = seconds in BCD
DL = alarm status
0 alarm not enabled
1 alarm enabled but will not power up system
2 alarm will power up system
-----------------------------------------------------------
INT 1A - SET UP SOUND MULTIPLEXOR (PCjr ONLY)
AH = 80h
AL = 0 source is 8253 channel 2
1 source is cassette input
2 source is I/O channle "Audio IN"
3 source is sound generator chip
-----------------------------------------------------------
INT 1B - CTRL-BREAK KEY
This interrupt is called when the keyboard scanner of the IBM
machines detects CTRL and BREAK pressed at the same time. It
normally points to a short routine in DOS which sets the
Ctrl-C flag, thus invoking INT 23h the next time DOS checks
for Ctrl-C.
-----------------------------------------------------------
INT 1C - CLOCK TICK
This interrupt is called (in the IBM) at the end of each time-update
operation by the real-time clock routines. It normally points to an
IRET.
-----------------------------------------------------------
INT 1D -> 6845 Video Init tables
table for modes 0 and 1 \
table for modes 2 and 3 \ each table is 16 bytes long and
table for modes 4,5, and 6 / contains values for 6845 registers
table for mode 7 /
4 words -- size of video RAM for modes 0/1, 2/3, 4/5, and 6/7
8 bytes -- number of columns in each mode
8 bytes -- video controller mode byte for each mode
-----------------------------------------------------------
INT 1E -> Diskette Params (BASE TABLE)
Default at f000:efc7
db step rate & head unload times
db head load time & DMA
db motor off time
db sector size (0->128, 1->256, 2->512, 3->1024)
db last sector number (8 or 9 typical)
db inter-sector gap size on read/write (42 typical)
db data transfer length (255 typical)
db inter-sector gap size on format (80 typical)
db sector fill on format (f6 typical)
db head-settle time ms (typical 25, 2.10->15)
db motor start-up time (1/8 secs) (typical 4, 2.10->2)
-----------------------------------------------------------
INT 1F -> Pointer to Graphics Set 2--contains bitmaps for high 128 chars
-----------------------------------------------------------
INT 20 - Minix - SEND/RECEIVE MESSAGE
AX = process ID of other process
BX = pointer to message
CX = 1 send
2 receive
3 send&receive
Note: the message contains the system call number (numbered as in V7 Unix(tm))
and the call parameters
-----------------------------------------------------------
INT 20 - DOS - PROGRAM TERMINATION
returns to DOS
-----------------------------------------------------------
INT 21 - PROGRAM TERMINATION
AH = 00h
Same action as INT 20; returns to DOS.
-----------------------------------------------------------
INT 21 - KEYBOARD INPUT
AH = 01h
Return: AL = character read
-----------------------------------------------------------
INT 21 - DISPLAY OUTPUT
AH = 02h
DL = character
-----------------------------------------------------------
INT 21 - AUX Input
AH = 03h
Return: AL = character read
-----------------------------------------------------------
INT 21 - AUX Output
AH = 04h
DL = character to send
-----------------------------------------------------------
INT 21 - PRINTER OUTPUT
AH = 05h
DL = character to print
-----------------------------------------------------------
INT 21 - DIRECT CONSOLE I/O - CHARACTER OUTPUT
AH = 06h
DL = character <> FFh
-----------------------------------------------------------
INT 21 - DIRECT CONSOLE I/O - CHARACTER INPUT
AH = 06h
DL = 0FFh
Return: ZF set = no character
ZF clear = character recieved
AL = character
Note: Character is echoed to STDOUT if received.
-----------------------------------------------------------
INT 21 - Direct STDIN Input, no echo
Reg AH = 07h
Note: same as Function 6 for input but char not echoed
-----------------------------------------------------------
INT 21 - KEYBOARD INPUT - NO ECHO
AH = 08h
Return: AL = character
-----------------------------------------------------------
INT 21 - PRINT STRING
AH = 09h
DS:DX = address of string terminated by "$"
-----------------------------------------------------------
INT 21 - BUFFERED KEYBOARD INPUT
AH = 0Ah
DS:DX = address of buffer
Note: first byte of buffer must contain maximum length
on return the second byte contains actual length, third and
subsequent bytes contain the input line
-----------------------------------------------------------
INT 21 - CHECK STANDARD INPUT STATUS
AH = 0Bh
Return: AL = FFh if character available
00h if no character
-----------------------------------------------------------
INT 21 - Clear Keyboard Buffer
AH = 0Ch
AL must be 1, 6, 7, 8, or 0Ah.
Flushes all typeahead input, then executes function specified
by AL (by moving it to AH and repeating the INT 21 call).
If AL contains a value not in the list above, the keyboard buffer is
flushed and no other action is taken.
-----------------------------------------------------------
INT 21 - Disk Reset
AH = 0Dh
Flushes all disk buffers.
-----------------------------------------------------------
INT 21 - SELECT DISK
AH = 0Eh
DL = new default drive number (0 = A, 1 = B, etc.)
Return: AL = number of logical drives
-----------------------------------------------------------
INT 21 - OPEN DISK FILE
AH = 0Fh
DS:DX = address of FCB
Return: AL = 00h file found
FFh file not found
-----------------------------------------------------------
INT 21 - CLOSE DISK FILE
AH = 10h
DS:DX = address of FCB
Return: AL = 00h directory update successful
FFh file not found in directory
-----------------------------------------------------------
INT 21 - Search First using FCB
AH = 11h
DS:DX = address of FCB
Return: AL =
00h = file found
FFh = file not found
If file found, FCB is created at DTA address and
set up to OPEN or DELETE it.
-----------------------------------------------------------
INT 21 - Search Next using FCB
AH = 12h
DS:DX = address of FCB
Return: AL =
00h = file found
FFh = file not found
If file found, FCB is created at DTA address and
set up to OPEN or DELETE it.
-----------------------------------------------------------
INT 21 - Delete File via FCB
AH = 13h
DS:DX = address of FCB
Return: AL =
00h = file found
FFh = file not found
-----------------------------------------------------------
INT 21 - SEQUENTIAL DISK FILE READ
AH = 14h
DS:DX = address of FCB
Return: AL =
0 = successful read
1 = end of file
2 = data transfer area too small
3 = partial record, EOF
-----------------------------------------------------------
INT 21 - SEQUENTIAL DISK RECORD WRITE
AH = 15h
DS:DX = address of FCB
Return: AL =
0 = successful write
1 = disk full
2 = data transfer area too small
-----------------------------------------------------------
INT 21 - CREATE A DISK FILE
AH = 16h
DS:DX = address of FCB
Return: AL =
00h = successful creation
FFh = directory full
-----------------------------------------------------------
INT 21 - Rename File via FCB
AH = 17h
DS:DX = address of FCB
FCB contains new name starting at byte 17h.
Return: AL =
00h = file found
FFh = file not found
-----------------------------------------------------------
INT 21 - Internal - does nothing
AH = 18h
Return: AL = 0
-----------------------------------------------------------
INT 21 - Default Disk Number
AH = 19h
Return: AL = current drive number (letter - 'A')
-----------------------------------------------------------
INT 21 - SET DISK TRANSFER AREA ADDRESS
AH = 1Ah
DS:DX = address of buffer
-----------------------------------------------------------
INT 21 - Default Drive Disk Size
AH = 1Bh
Return: DS:BX points to FAT ID byte
DX = number of allocation units on disk
AL = number of sectors per allocation unit (cluster)
CX = number of bytes per sector
-----------------------------------------------------------
INT 21 - Specific Drive's Disk Size
AH = 1Ch
DL = Drive Number to check
Return: DS:BX points to FAT ID byte
DX = number of allocation units on disk
AL = number of sectors per allocation unit (cluster)
CX = number of bytes per sector
-----------------------------------------------------------
INT 21 - Internal - does nothing
AH = 1Dh
Return: AL = 0
-----------------------------------------------------------
INT 21 - Internal - does nothing
AH = 1Eh
Return: AL = 0
-----------------------------------------------------------
INT 21 - Internal - GET DEFAULT DRIVE PARAMETER BLOCK
AH = 1Fh
Return: AL = 00h No Error
FFh Error
(DS:BX) = ADDRESS OF DRIVE PARAMETER BLOCK.
Note: for DOS 2.x and 3.x, this just invokes function 32h with DL = 0
-----------------------------------------------------------
INT 21 - Internal - does nothing
AH = 20h
Return: AL = 0
-----------------------------------------------------------
INT 21 - RANDOM DISK RECORD READ
AH = 21h
DS:DX = address of FCB
Return: AL =
0 = successful read
1 = end of file
2 = data transfer area too small
3 = partial record, EOF
-----------------------------------------------------------
INT 21 - Random Disk Write
AH = 22h
Same setup as Random Read, but writes to disk
-----------------------------------------------------------
INT 21 - FILE SIZE
AH = 23h
DS:DX = address of FCB
Return: AL =
00h = file found
FFh = file not found
FCB SET TO NO. OF RECORDS
-----------------------------------------------------------
INT 21 - Set Random Record Field
AH = 24h
DS:DX = address of FCB
Return: Random Record Field of FCB is set to be same as Current Block
and Current Record.
Note: FCB must be OPEN already
-----------------------------------------------------------
INT 21 - Set Interrupt Vector
AH = 25h
AL = interrupt number
DS:DX = new vector to be used for specified interrupt
-----------------------------------------------------------
INT 21 - Create PSP
AH = 26h
DX = Segment number to set up PSP at
Current PSP is copied to specified segment
-----------------------------------------------------------
INT 21 - RANDOM BLOCK READ
AH = 27h
DS:DX = address of FCB
CX = number of records to be read
Return: AL =
0 = successful read
1 = end of file
2 = data transfer area too small
3 = partial record, EOF
-----------------------------------------------------------
INT 21 - RANDOM BLOCK WRITE
AH = 28h
DS:DX = address of FCB
CX = number of records to be written
if zero, truncate file to current random file position
Return: AL =
0 = successful write
1 = disk full
2 = data transfer area too small
-----------------------------------------------------------
INT 21 - Parse Filename
AH = 29h
DS:SI = pointer to string to parse
ES:DI = pointer to memory to fill with unopened FCB
AL = bit mask to control parsing
0 = 0: parsing stops if file separator found
1: leading separator ignored
1 = 0: drive number in FCB set to default drive if not present
in string
1: drive number in FCB not changed
2 = 0: filename in FCB set to blanks if no filename in string
1: filename in FCB not changed if string does not contain
a filename
3 = 0: extension in FCB set to blanks if no extension in string
1: extension left unchanged
Return: AL = 00: no wildcards in name or extension
01: wildcards appeared
DS:SI = pointer to first byte after parsed string
ES:DI = unopened FCB
-----------------------------------------------------------
INT 21 - GET CURRENT DATE
AH = 2Ah
Return: DL = day
DH = month
CX = year
AL = day of the week (0=Sunday, 1=Monday, etc.)
-----------------------------------------------------------
INT 21 - Set CURRENT DATE
AH = 2Bh
DL = day
DH = month
CX = year
Return: AL = 0 if no error
AL = 0FFh if bad value sent to routine
(DOS 3.3 also sets CMOS clock)
(DESQview also accepts CX = 4445h and DX = 5351h, i.e. 'DESQ' as valid)
-----------------------------------------------------------
INT 21 - GET CURRENT TIME
AH = 2Ch
Return: CH = hours
CL = minutes
DH = seconds
DL = hundredths of seconds
Note: time is updated approximately every 5/100 second
-----------------------------------------------------------
INT 21 - Set CURRENT TIME
AH = 2Dh
CH = hours
CL = minutes
DH = seconds
DL = hundredths of seconds
Return: AL = 0 if no error
AL = 0ffH if bad value sent to routine
(DOS 3.3 also sets CMOS clock)
-----------------------------------------------------------
INT 21 - Set Verify Flag
AH = 2Eh
DL = 0
AL = 1 if VERIFY on
AL = 0 if VERIFY off
-----------------------------------------------------------
INT 21 - Get Disk Transfer Area Address
AH = 2Fh
Return: ES:BX = address of DTA
-----------------------------------------------------------
INT 21 - Get DOS Version
AH = 30h
Return: AL = Major Version number
AH = Minor Version number
BH = OEM number
BL:CX = 24-bit user number
-----------------------------------------------------------
INT 21 - TERMINATE BUT STAY RESIDENT
AH = 31h
AL = exit code
DX = program size, in paragraphs
-----------------------------------------------------------
INT 21 - Internal - GET DRIVE PARAMETER BLOCK
AH = 32h
DL = drive number
0 = default, 1 = A, etc.
Return: AL = 0FFh if invalid drive number, else
DS:BX = address of drive parameter block.
STRUCTURE OF DOS DRIVE PARAMETER BLOCK:
DPBLOCK STRUCT ;OFFSET
DISK_OFFSET DB ? ; 0. drive number (0 = A, etc.)
UNIT_OFFSET DB ? ; 1. unit number within device driver
SECTOR_SIZE DW ? ; 2. number of bytes per sector
MAX_CLUSTER DB ? ; 4. largest sector number in cluster
; add one for number of sectors/cluster
LOG2_SECTORS DB ? ; 5. log base two of the cluster size
RESERVED DW ? ; 6. number of reserved (boot) sectors
FAT_COUNT DB ? ; 8. number of copies of the FAT
ROOT_COUNT DW ? ; 9. number of root directory entries
DATA_START DW ? ; 11. first data sector on medium
MAX_NUMBER DW ? ; 13. largest possible cluster number
; subtract one for number of data clusters
FAT_SECTORS DB ? ; 15. number of sectors in one FAT copy
ROOT_START DW ? ; 16. first sector of root directory
DEVICE_ADDR DD ? ; 18. address of device driver for this drive
DESCRIPTOR DB ? ; 22. media descriptor byte for medium
VALID_BYTE DB ? ; 23. 0FFh indicates block must be rebuilt
NEXT_BLOCK DD ? ; 24. address of next device block in list
; FROM THIS POINT ON, DOS 3 DIFFERS FROM 2:
IF DOS2
DIR_START DW ? ; 28. starting cluster of current directory
; zero indicates the root directory
PATH_NAME DB 64 DUP (?)
; 30. ASCIIZ current directory path string
ELSE DOS3
; on my XT, this was always:
DW 0
DW 0FFFFh
ENDIF
DPBLOCK ENDS
-----------------------------------------------------------
INT 21 - Get or Set CONTROL-BREAK
AH = 33h
AL = subfunction
00h Get
01h Put
DL = 0 for OFF or 1 for ON
02h internal, called by PRINT.COM (DOS 3.1)
Return: DL = current BREAK setting if AL = 00h
0 BREAK=OFF
1 BREAK=ON
AL = FFh if error
-----------------------------------------------------------
INT 21 - Internal - Return CritSectFlag Pointer
AH = 34h
Return: ES:BX points to DOS "Critical Section Flag"
Notes:
When byte pointed to is zero, DOS is supposed to be
safe to interrupt. NOT RELIABLE according to Chris Dunford.
Examination of DOS 2.10 code in this area indicates that the
byte immediately FOLLOWING this "Critical Section Flag" must
be 00 to permit the PRINT.COM interrupt to be called.
For DOS 3.0 and 3.1 (except COMPAQ DOS 3.0), the byte BEFORE
the "Critical Section Flag" must be zero, and for COMPAQ DOS 3.0,
the byte 01AAh before it must be zero.
-----------------------------------------------------------
INT 21 - Get Interrupt Vector
AH = 35h
AL = interrupt number
Return: ES:BX = value of interrupt vector
-----------------------------------------------------------
INT 21 - DISK SPACE
AH = 36h
DL = drive code (0 = default, 1 = A, 2 = B, etc.)
Return: AX = number of sectors per cluster
or 0FFFFh if invalid drive
BX = number of available clusters
CX = bytes per sector
DX = total clusters
Note: multiply AX x CX x BX for free space on disk
multiply AX x CX x DX for total disk space
-----------------------------------------------------------
INT 21 - Internal - switchar/availdev
AH = 37h
AL = subfunction
0 Read switch character (returns current character in DL)
1 Set switch character (specify new character in DL)
2 (DOS 2.x only) Read device availability (as set by function AL=3)
3 (DOS 2.x only) Set device availability, where:
DL = 0 means /DEV/ must preceed device names
DL <> 0 means /DEV/ need not preceed device names
Return: DL = Switch character (if AL=0 or 1)
Device availability flag (if AL=2 or 3)
AL=0FFh means the value in AL was not in the range 0-3.
-----------------------------------------------------------
INT 21 - Get Country-Dependent Information
AH = 38h
DOS 2.x
AL = 0 get current-country info
DS:DX = segment:offset of buffer for returned info
Return: BX = country code
buffer at DS:DX filled as follows:
bytes 0-1 = date format 0 = USA mm dd yy
1 = Europe dd mm yy
2 = Japan yy mm dd
byte 2 = currency symbol
byte 3 = 00h
byte 4 = thousands separator char
byte 5 = 00h
byte 6 = decimal separator char
byte 7 = 00h
bytes 8-1Fh reserved
DOS 3.x
AL = 0 for current country
AL = 01h thru 0FEh for specific country with code <255
AL = 0FFh for specific country with code >= 255
BX = 16-bit country code
DS:DX = segment:offset of buffer for returned info
DX = 0FFFFh if setting country code, rather than getting info
Return: (if DX <> 0FFFFh)
BX = country code
DS:DX filled in:
bytes 0-1 = date format (see above)
bytes 2-6 = currency symbol string, ASCIZ
byte 7 = thousands seaprator char
byte 8 = 00h
byte 9 = decimal separator char
byte 0Ah = 00h
byte 0Bh = date separator char
byte 0Ch = 00h
byte 0Dh = time separator char
byte 0Eh = 00h
byte 0Fh = currency format
bit 1 = number of spaces between value and curr sym
bit 0 = 0 if currency symbol precedes value
1 if currency symbol follows value
byte 10h = number of digits after decimal in currency
byte 11h = time format
bit 0 = 0 if 12-hour clock
1 if 24-hour clock
bytes 12h-15h = address of case map routine (FAR CALL)
byte 16h = data-list separator char
byte 17h = 00h
bytes 18h-21h reserved
If error:
CF set
AX = error code
-----------------------------------------------------------
INT 21 - CREATE A SUBDIRECTORY (MKDIR)
AH = 39h
DS:DX = address of ASCIIZ pathname
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - REMOVE A DIRECTORY ENTRY (RMDIR)
AH = 3Ah
DS:DX = address of ASCIIZ pathname
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - CHANGE THE CURRENT DIRECTORY (CHDIR)
AH = 3Bh
DS:DX = address of ASCIIZ directory name
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - CREATE A FILE WITH HANDLE (CREAT)
AH = 3Ch
CX = attributes for file
DS:DX = address of ASCIZ filename
Return: CF = 1 if error
AX = Error Code
CF = 0 successful
AX = file handle
-----------------------------------------------------------
INT 21 - OPEN DISK FILE WITH HANDLE
AH = 3Dh
AL = access code
0 = Read Only
1 = Write Only
2 = Read/Write
AL bits 7-3 = file-sharing modes (DOS 3.x)
bit 7 = inheritance flag, set for no inheritance
bits 4-6 = sharing mode
000 compatibility mode
001 exclusive (deny all)
010 write access denied (deny write)
011 read access denied (deny read)
100 full access permitted (deny none)
bit 3 = reserved, should be zero
DS:DX = address of ASCIZ filename
DX = OFFSET ADDRESS OF ASCIIZ
Return: CF = 1 if error
AX = Error Code
CF = 0 successful
AX = file handle
-----------------------------------------------------------
INT 21 - CLOSE A FILE WITH HANDLE
AH = 3Eh
BX = file handle
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - READ FROM FILE WITH HANDLE
AH = 3Fh
BX = file handle
CX = number of bytes to read
DS:DX = address of buffer
Return: CF = 1 if error
AX = Error Code
CF = 0 successful
AX = number of bytes read
-----------------------------------------------------------
INT 21 - WRITE TO FILE WITH HANDLE
AH = 40h
BX = file handle
CX = number of bytes to write
DS:DX = pointer to buffer
Return: CF = 1 if error
AX = Error Code
CF = 0 successful
AX = number of bytes written
-----------------------------------------------------------
INT 21 - DELETE A FILE (UNLINK)
AH = 41h
DS:DX = pointer to ASCIIZ name of file to delete
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - MOVE FILE READ/WRITE POINTER (LSEEK)
AH = 42h
AL = method value
0 = offset from beginning of file
1 = offset from present location
2 = offset from end of file
BX = file handle
CX:DX = offset in bytes
Return: CF = 1 if error
AX = Error Code
CF = 0 successful
DX:AX = new offset
-----------------------------------------------------------
INT 21 - GET/PUT FILE ATTRIBUTES (CHMOD)
AH = 43h
AL =
0 = get file attributes
1 = put file attributes
CX = file attribute bits
0 = read only
1 = hidden file
2 = system file
3 = volume label
4 = subdirectory
5 = written since backup
DX = pointer to ASCIIZ file name
Return: CF = 1 if error
AX = Error Code if any
CX = file attributes on get
-----------------------------------------------------------
INT 21 - IOCTL
AH = 44h
AL =
0 = Get device information (DX)
1 = Set device information (DL, DH = 0)
DX BITS =
0 = console input device
1 = console output device
2 = null device
3 = clock device
5 = binary mode
6 = EOF
7 = device is character device if set
if not, EOF = 0 if channel has been written
bits 0-5 are block device number
12 = network device
14 = can process control strings (AL=2-5, can only be read)
15 reserved
2 = Read CX bytes to DS:DX from BX control chan
3 = Write CX bytes from DS:DX from BX control chan
4 = as 2 but for drive BL
5 = as 3 but for drive BL
AX = number of bytes transfered
6 = Get input status
7 = Get output status
AX = FFH for ready or 00h for not ready
8 = Is block device BL changeable? (DOS 3)
AX = 0 = yes
9 = Is logical device BL local? (DOS 3)
DX (attribute word) bit 12 (1000h) = 0 = yes
10 = Is handle BX local? (DOS 3)
DX (attribute word) bit 15 (8000h) = 0 = yes
11 = Change sharing retry count to DX (def 3), (DOS 3.x)
delay CX (def 1)
12 = General IOCTL (DOS 3.3 [3.2?])
BX = file handle (or BL = drive number w/0 = default)
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - Create Duplicate Handle (DUP)
AH = 45h
BX = file handle to duplicate
Return: CF = 1 if error
AX = Error Code
CF = 0 successful
AX = new file handle
-----------------------------------------------------------
INT 21 - Force Duplicate Handle (FORCDUP) (DUP2)
AH = 46h
BX = Existing file handle
CX = new file handle
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - Get Current Directory
AH = 47h
DL = drive (0=default, 1=A, etc.)
DS:SI points to 64-byte buffer area
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - Allocate Memory
AH = 48h
BX = number of 16-byte paragraphs desired
Return: CF = 1 if error
AX = Error Code
BX = Maximum available
CF = 0 successful
AX = segment of allocated memory block
-----------------------------------------------------------
INT 21 - Free Memory
AH = 49h
ES = Segment address of area to be freed
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - Adjust Block Size (SETBLOCK)
AH = 4Ah
ES = Segment address of block to change
BX = New size in paragraphs
Return: CF = 1 if error
AX = Error Code
BX = Maximum size possible for the block
-----------------------------------------------------------
INT 21 - Load or Execute (EXEC)
AH = 4Bh
AL = subfunction
0 = load and execute program
2 = load (Internal) but do not execute
3 = load overlay; do not create PSP
DS:DX = filename
ES:BX = parameter block
AL =
0 => word segment environment pointer
dword command line pointer
dword FCB 1
dword FCB 2
3 => word segment load address
word segment relocation factor
Return: CF = 1 if error
AX = Error Code
struct exec {
unsigned exec_magic; /* 0x4d, 0x5a signature */
unsigned exec_isr; /* image size remainder (mod 512) */
unsigned exec_size; /* file size in pages (512) */
unsigned exec_nrel; /* number of relocation items */
unsigned exec_hsize; /* header size in paragraphs */
unsigned exec_min; /* minimum extra paragraphs */
unsigned exec_max; /* maximum extra paragraphs */
unsigned exec_ss; /* stack segment */
unsigned exec_sp; /* stack offset */
unsigned exec_cksum; /* word checksum of entire file */
unsigned exec_pc; /* initial pc */
unsigned exec_cs; /* code segment */
unsigned exec_orel; /* offset of relocation table */
unsigned exec_ovno; /* overlay number */
};
-----------------------------------------------------------
INT 21 - Quit With Exit Code (EXIT)
AH = 4Ch
AL = exit code
Return: never returns
-----------------------------------------------------------
INT 21 - GET EXIT CODE OF SUBPROGRAM (WAIT)
AH = 4Dh
Return: AL = exit code of subprogram (functions 31h or 4Ch)
AH = circumstance which caused termination
0 = Terminate/abort
1 = Control-C
2 = Hard error
3 = Terminate and stay resident
-----------------------------------------------------------
INT 21 - Find First ASCIIZ (FIND FIRST)
AH = 4Eh
CX = search attributes
DS:DX = pointer to ASCIIZ filename
Return: CF = 1 if error
AX = Error Code if any
(DTA) = data block
-----------------------------------------------------------
INT 21 - Find Next ASCIIZ (FIND NEXT)
AH = 4Fh
Return: CF = 1 if error
AX = Error Code
(DTA) = data block
-----------------------------------------------------------
INT 21 - Internal - Set PSP Segment
AH = 50h
BX = Segment address of new PSP
Note: under DOS 2.xx, this function cannot be invoked inside an INT 28h
handler
-----------------------------------------------------------
INT 21 - Internal - Get PSP Segment
AH = 51h
Return: BX = Current PSP Segment
struct psp {
char psp_int20[2]; /* 00h: exit */
unsigned psp_msize; /* 02h: memory size in paragraphs */
char psp_res0[1]; /* 04h: XXX (0) */
char psp_dos[5]; /* 05h: far call to dos */
int (*psp_term)(); /* 0ah: terminate address */
unsigned psp_tseg; /* 0ch: terminate segment */
int (*psp_break)(); /* 0eh: break address */
unsigned psp_bseg; /* 10h: break segment */
int (*psp_error)(); /* 12h: error address */
unsigned psp_eseg; /* 14h: error segment */
unsigned psp_ppsp; /* 16h: parent psp segment */
char psp_ofile[20]; /* 18h: open files, 0xff = unused */
unsigned psp_envp; /* 2ch: environment segment */
char psp_res2[4]; /* 2eh: XXX */
int psp_nfiles; /* 32h: max open files */
char *psp_aofile; /* 34h: ofile address */
unsigned psp_aoseg; /* 36h: ofile segment */
char psp_res3[24]; /* 38h: XXX */
char psp_int21[3]; /* 50h: int 21, far return */
char psp_res4[2]; /* 53h: XXX */
char psp_xfcb1[7]; /* 55h: FCB #1 extension */
char psp_fcb1[9]; /* 5ch: FCB #1 */
char psp_xfcb2[7]; /* 65h: FCB #2 extension */
char psp_fcb2[20]; /* 6ch: FCB #2 */
char psp_dma[128]; /* 80h: Command Tail */
};
Note: under DOS 2.xx, this function cannot be invoked inside an INT 28h
handler
-----------------------------------------------------------
INT 21 - Internal - Get Disk List
AH = 52h
Return: ES:BX points to DOS list of lists
List of Lists:
Bytes Value
-2&-1 Segment of first memory control block
0-3 Pointer to first DOS disk block (see func 36h)
4-7 Partially Unknown. Pointer to a device driver. Maybe first
resident driver?
8-B Pointer to CLOCK$ device driver, whether installable or
resident
C-F Pointer to actual CON: device driver, whether installable
or resident
-----DOS 2.x
10 Number of logical drives in system
11-12 Maximum bytes/block of any block device
13-16 unknown
17 Beginning (not a pointer. The real beginning!) of NUL device
driver. This is the first device on DOS's linked list
of device drivers.
-----DOS 3.x
10-11 Maximum bytes/block of any block device (0200h)
12-15 Unknown. Pointer to current directory block????
16-19 Partially Undefined: Pointer to array of drive info:
51h bytes per drive, starting with A: ...
00-3F Current path as ASCIIZ, starting with 'x:\'
40-43 Unknown. I see zeros always
44 Unknown. Flags? I see 40h, except for
entry after last valid entry = 00h
45-48 Pointer to DOS Disk Block for this drive
49-4A Unknown. Current track or block? -1 if never
accessed.
4B-4E Unknown. I see -1 always
4F-52 Unknown. I see 2 always
1A-1D Unknown. Pointer to data area, maybe including cluster
allocation table?
1E-1F Unknown. I see zero always
20 Number of block devices.
21 Value of LASTDRIVE command in CONFIG.SYS (default 5)
22 Beginning (not a pointer. The real beginning!) of NUL device
driver. This is the first device on DOS's linked list
of device drivers.
-----------------------------------------------------------
INT 21 - Internal - Translate BPB
AH = 53h
DS:SI points to BPB (Bios Parameter Block)
ES:BP points to area for DOS Disk Block
Translates BPB (Bios Parameter Block, see below)
into a DOS Disk Block (see function call 32h).
BPB
Bytes Value
0-1 Bytes/sector. Get from DDB bytes 2-3.
2 Sectors/cluster. Get from: (DDB byte 4) + 1
3-4 Reserved sectors. Get from: DDB bytes 6-7
5 Number of FATs. Get from: DDB byte 8
6-7 Number of root dir entries. Get from: DDB bytes 9-A
8-9 Total # of sectors. Get from:
((DDB bytes D-E) - 1) * (sectors per cluster (BPB byte 2))
+ (DDB Bytes B-C)
A Media descriptor byte. Get from: DDB byte 16
B-C Number of sectors/FAT. Get from: DDB byte F
-----------------------------------------------------------
INT 21 - Get Verify Flag
AH = 54h
Return: AL = 0 if flag OFF
AL = 1 if flag ON
-----------------------------------------------------------
INT 21 - Internal - Create PSP
AH = 55h
DX = Segment number to set up PSP at
Note: Like FN 26h but creates "child" PSP rather than copying existing one.
-----------------------------------------------------------
INT 21 - RENAME A FILE
AH = 56h
DS:DX = pointer to ASCIZ old name
ES:DI = pointer to ASCIZ new name
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - Get/Put Date/Time
AH = 57h
AL = function code
0 = get date and time
1 = set date and time
CX = time to be set
DX = date to be set
BX = file handle
Return: CF = 1 if error
AX = Error Code
CX = time of last write (if AL = 0)
DX = date of last write (if AL = 0)
-----------------------------------------------------------
INT 21 - Get/Set allocation strategy (DOS 3.x)
AH = 58h
AL = function code
0 = get allocation strategy
1 = set allocation strategy
BL = strategy code
0 first fit (use first memory block large enough)
1 best fit (use smallest memory block large enough)
2 last fit (use high part of last usable memory block)
Return: CF = 1 error
AX = Error Code
CF = 0 successful
AX = strategy code
Note: the Set subfunction accepts any value in BL; 2 or greater means last fit.
the Get subfunction returns the last value set, so programs should check
whether the value is >= 2, not just equal to 2.
-----------------------------------------------------------
INT 21 - GET EXTENDED ERROR CODE (DOS 3.X)
AH = 59h
BX = version code (0000 for DOS 3.0)
Return: AX = extended error code
BH = class of error
BL = suggested action code
CH = locus (where error occurred)
Error codes:
01 function number invalid
02 file not found
03 path not found
04 too many open files
05 access denied
06 invalid handle
07 memory control block destroyed
08 insufficient memory
09 memory block address invalid
0A environment invalid
0B format invalid
0C access code invalid
0D data invalid
0F invalid drive
10 attempted to remove current directory
11 not same device
12 no more files
13 disk write-protected
14 unknown unit
15 drive not ready
16 unknown command
17 data error (CRC)
18 bad request structure length
19 seek error
1A unknwon media type
1B sector not found
1C printer out of paper
1D write fault
1E read fault
1F general failure
20 sharing violation
21 lock violation
22 disk change invalid
23 FCB unavailable
24-31 reserved
32 Network request not supported (DOS 3.1 + MS Networks)
33 Remote computer not listening
34 Duplicate name on network
35 Network name not found
36 Network busy
37 Network device no longer exists
38 Network BIOS command limit exceeded
39 Network adapter hardware error
3A Incorrect response from network
3B Unexpected network error
3C Incompatible remote adapter
3D Print queue full
3E Queue not full
3F Not enough space to print file
40 Network name was deleted
41 Network: Access denied
42 Network device type incorrect
43 Network name not found
44 Network name limit exceeded
45 Network BIOS session limit exceeded
46 Temporarily paused
47 Network request not accepted
48 Print/disk redirection paused (DOS 3.1 + MS Networks)
49-4F reserved
50 file exists
51 reserved
52 cannot make directory
53 fail on INT 24h
Error Classes:
01 out of resource
02 temporary situation
03 authorization (denied access)
04 internal
05 hardware failure
06 system failure
07 application program error
08 not found
09 bad format
0A locked
0B media error
0C already exists
0D unknown
Suggested Action:
01 retry
02 delayed retry
03 prompt user
04 abort after cleanup
05 immediate abort
06 ignore
07 retry after user intervention
Error Locus:
01 unknown or not appropriate
02 block device
03 network related
04 serial device
05 memory related
-----------------------------------------------------------
INT 21 - CREATE TMEPORARY FILE (DOS 3.x)
AH = 5Ah
DS:DX = pointer to ASCIZ directory path name
CX = file attribute
Return: CF = 1 if error
AX = Error Code if any
DS:DX = path name
Note: The file created is not truly "temporary". It MUST be removed
by the user.
-----------------------------------------------------------
INT 21 - CREATE NEW FILE (DOS 3.x)
AH = 5Bh
DS:DX = pointer to ASCIZ directory path name
CX = file attribute
Return: CF = 1 if error
AX = Error Code if any
DS:DX = path name
Note: Unlike function 3Ch, function 5Bh will fail if the file already
exists.
-----------------------------------------------------------
INT 21 - LOCK/UNLOCK FILE ACCESS (DOS 3.x)
AH = 5Ch
AL = 0 if lock
1 if unlock
BX = file handle
CX:DX = starting offset of region to lock
SI:DI = size of region to lock
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - Internal - Get address of critical error flag
AX = 5D06h
Return: DS:SI = pointer to critical error flag
CX = ???
DX = ???
Note: this call also does a lot of other work in addition to returning
the pointer
-----------------------------------------------------------
INT 21 - Internal - Unknown
AH = 5Dh
AL = subfunction
07h: ???
08h: (used by COMMAND.COM)
09h: (used by COMMAND.COM)
-----------------------------------------------------------
INT 21 - Get Machine Name (DOS 3.1 + Microsoft Networks)
AX = 5E00h
DS:DX -> buffer for ASCIIZ name
Return: CF = 1 if error
AX = Error Code
CH = 0 if name not defined
CL = NETBIOS name number
DS:DX -> pointer to identifier if CH <> 0
-----------------------------------------------------------
INT 21 - Set Printer Setup (DOS 3.1 + Microsoft Networks)
AX = 5E02h
BX = Redirection list index
CX = length of setup string <= 64
DS:SI -> string buffer
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - Get Printer Setup (DOS 3.1 + Microsoft Networks)
AX = 5E03h
BX = Redirection list index
ES:DI -> string buffer
Return: CF = 1 if error
AX = Error Code
CX = length of setup string <= 64
-----------------------------------------------------------
INT 21 - Get Redirection List Entry (DOS 3.1 + Microsoft Networks)
AX = 5F02h
BX = Redirection list index
DS:SI -> 16 char local device name buffer
ES:DI -> 128 char network name buffer
Return: CF = 1 if error
AX = Error Code
BH = Device status flag (BIT 0 = 0 if valid)
BL = device type (03 if printer, 04 if drive)
CX = stored parameter value
Note: DX and BP are destroyed by this call!
-----------------------------------------------------------
INT 21 - Redirect Device (DOS 3.1 + Microsoft Networks)
AX = 5F03h
BL = device type
03 = printer device
04 = file device
CX = stored parameter value
DS:SI -> source device name
ES:DI -> destination ASCIIZ network path + ASCIIZ password
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - Cancel Redirection (DOS 3.1 + Microsoft Networks)
AX = 5F04h
DS:SI -> device name or network path
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 21 - Internal - Resolve path string to fully qualified path string
AH = 60h
DI:SI = relative path strings
ES:DI = buffer for fully qualified name
Return: buffer filled with qualified name
may return error code, unknown.
-----------------------------------------------------------
INT 21 - Internal - Unused (DOS 3.x)
AH = 61h
Return: AL = 0
-----------------------------------------------------------
INT 21 - GET PSP ADDRESS (DOS 3.x)
AH = 62h
Return: BX = segment address of PSP
-----------------------------------------------------------
INT 21 - GET LEAD BYTE TABLE (DOS 2.25 only)
AH = 63h
AL = subfunction
0 = get system lead byte table
1 = set/clear interim console flag
DL = 1/0 to set/clear interim console flag
2 = get interim console flag
Return: DS:SI -> lead byte table (AL = 0)
DL = interim console flag (AL = 2)
-----------------------------------------------------------
INT 21 - Internal - unknown (DOS 3.3)
AH = 64h
-----------------------------------------------------------
INT 21 - GET EXTENDED COUNTRY INFORMATION (DOS 3.3)
AH = 65h
AL = info ID (1 - 6)
BX = code page (-1=global code page)
DX = country ID (-1=current country)
ES:DI = pointer to country information buffer
CX = size of buffer
Return: AX = error code if carry set, otherwise
CX = size of country information returned
ES:DI = pointer to country information:
1 BYTE info ID
if info ID <> 1
1 DWORD pointer to information
if info ID == 1
1 WORD size
1 WORD country ID
1 WORD code page
34 BYTE see function 38h
-----------------------------------------------------------
INT 21 - GET/SET GLOBAL CODE PAGE TABLE (DOS 3.3)
AH = 66h
AL = 00h get global code page
Return: AX = error code if carry flag set
BX = active code page
DX = system code page
= 01h set global page
BX = active code page
DX = system code page (active page at boot time)
Return: AX = error code if carry flag set
-----------------------------------------------------------
INT 21 - SET HANDLE COUNT (DOS 3.3)
AH = 67h
BX = desired number of handles (max 255)
Return: Carry clear if ok
Carry set if error (and error code in AX)
-----------------------------------------------------------
INT 21 - COMMIT FILE - WRITE ALL BUFFERED DATA TO DISK (DOS 3.3)
AH = 68h
BX = file handle
Return: carry flag set on error (and error code in AX)
-----------------------------------------------------------
INT 21 - DoubleDos -
AX = E400h
Return: AL <> 0 if DoubleDos is active
-----------------------------------------------------------
INT 21 - DoubleDos - Turn off Task Switching
AH = EAh
Return: task switching turned off
-----------------------------------------------------------
INT 21 - DoubleDos - Turn on Task Switching
AH = EBh
Return: task switching turned on
-----------------------------------------------------------
INT 21 - DoubleDos - Get Virtual Screen Address
AH = ECh
Return: ES = segment of virtual screen
Note: Screen address can change if task-switching is on!!
-----------------------------------------------------------
INT 21 - DoubleDos - Give away time to other tasks
AH = EEh
AL = number of 55ms time slices to give away
Return: returns after giving away time slices
-----------------------------------------------------------
INT 21 - CED installable commands
AH = 0FFh
AL = 0 add installable command
BL = mode - bit 0 = 1 callable from DOS prompt
bit 1 = 1 callable from application
DS:SI pointer to CR-terminated command name
ES:DI pointer to FAR routine entry point
AL = 1 remove installable command
DS:SI pointer to CR-terminated command name
AL = 2 reserved, may be used to test for CED installation
Return: CF set on error
AX = 01h invalid function
02h command not found (subfunction 1 only)
08h insufficient memory (subfunction 0 only)
0Eh bad data (subfunction 0 only)
AH = 0FFh if CED not installed
-----------------------------------------------------------
INT 22 - TERMINATE ADDRESS
FAR (DWORD) address of routine to be executed when program
"returns to DOS". Should NEVER be called directly.
-----------------------------------------------------------
INT 23 - CONTROL "C" EXIT ADDRESS
Automatically called from keyboard scanner when CTRL-C or
CTRL-BREAK is detected. Normally aborts program and returns
to DOS, but may be changed.
-----------------------------------------------------------
INT 24 - FATAL ERROR ABORT ADDRESS
Automatically called upon detection of unrecoverable
disk error. Normally prints "Abort, Retry, or Ignore?" message
and takes the reply, but may be changed if desired.
Provides the following values in registers on entry to interrupt handler:
AH: bit 7 = 0 disk I/O error
= 1 other error -- if block device, bad FAT
-- if char device, code in DI
bit 6 unused
bit 5 = 1 if Ignore allowed, 0 if not (DOS 3.2?)
bit 4 = 1 if Retry allowed, 0 if not (DOS 3.2?)
bit 3 = 1 if Fail allowed, 0 if not (DOS 3.2+)
bit 2 \ disk area of error 00 = DOS area 01 = FAT
bit 1 / 10 = root dir 11 = data area
bit 0 = 1 if write, 0 if read
AL = drive number if AH bit 7 = 1, otherwise undefined
BP:SI = address of device header for which error occurred
block device if high bit of BP:SI+4 = 1
low byte of DI:
00h write-protect error
01h unknown unit
02h drive not ready
03h unknown command
04h data error (bad CRC)
05h bad request structure length
06h seek error
07h unknown media type
08h sector not found
09h printer out of paper
0Ah write fault
0Bh read fault
0Ch general failure
0Fh invalid disk change (DOS 3.x)
Handler must return
AL = 00 ignore error
= 01 retry operation
= 02 terminate program through INT 22h
= 03 fail system call in progress (DOS 3.2+)
-----------------------------------------------------------
INT 25 - ABSOLUTE DISK READ
AL = Drive number (0=A, 1=B, etc)
DS:BX = Disk Transfer Address (buffer)
CX = Number of sectors to read
DX = First relative sector to read
Return: CF = 1 if error
AL = error code issued to INT 24h in low half of DI
AH = 80h if attachment failed to respond
40h if seek operation failed
20h if controller failed
10h if data error (bad CRC)
08h if DMA failure
04h if requested sector not found
03h if write-protected disk
02h if bad address mark
01h if bad command
Note: ORIGINAL FLAGS ON STACK!
-----------------------------------------------------------
INT 26 - ABSOLUTE DISK WRITE
AL = Drive number (0=A, 1=B, etc)
DS:BX = Disk Transfer Address (buffer)
CX = Number of sectors to write
DX = First relative sector to write
Return: CF = 1 if error
AL = error code issued to INT 24h in low half of DI
AH = same error codes as for INT 25h
Note: ORIGINAL FLAGS ON STACK!
-----------------------------------------------------------
INT 27 - TERMINATE BUT STAY RESIDENT
CS = current program segment
DX = last program byte + 1
-----------------------------------------------------------
INT 28 - Internal - Keyboard Busy Loop
This interrupt is called from inside the "get input from keyboard"
routine in DOS, if and only if it is safe to use INT 21 to access
the disk at that time. It is used primarily by the PRINT.COM
routines and TSR programs, but any number of other routines could
be chained to it by saving the original vector, and calling it
with a FAR call (or just JMPing to it) at the end of the new
routine.
The INT 28h handler may invoke any INT 21h function except functions
00h through 0Ch (and 50h/51h under DOS 2.xx).
Until some program installs its own routine, this interrupt vector
simply points to an IRET opcode.
-----------------------------------------------------------
INT 29 - Internal - Fast Putchar
This interrupt is called from the DOS output routines if output
is going to a device rather than a file, and the device driver's
attribute word has bit 3 (04h) set to "1".
-----------------------------------------------------------
INT 2A - Network Installation Check (Microsoft Networks)
AH = 00h
Return: AH <> 0 if installed
-----------------------------------------------------------
INT 2A - Check Direct I/O (Microsoft Networks)
AX = 0300h
DS:SI -> ASCIIZ disk device name
Return: CF == 0 if allowed
-----------------------------------------------------------
INT 2A - Execute NETBIOS (Microsoft Networks)
AH = 04h
AL = 0 for error retry, 1 for no retry
ES:BX -> NCB
Return: AX = 0 for no error
AH = 1, AL = error code
-----------------------------------------------------------
INT 2A - Get Network Resource Information (Microsoft Networks)
AX = 0500h
Return: AX = reserved
BX = number of network names
CX = number of commands
DX = number of sessions
-----------------------------------------------------------
INT 2A - Unknown
AH = 82h
Return: ???
Note: Called by the INT 21h function dispatcher in DOS 3.10
-----------------------------------------------------------
INT 2B - Internal routine for MSDOS (IRET)
-----------------------------------------------------------
INT 2C - Internal routine for MSDOS (IRET)
-----------------------------------------------------------
INT 2D - Internal routine for MSDOS (IRET)
-----------------------------------------------------------
INT 2E - Internal - Execute Command
ES:SI -> counted CR-terminated command string
The top-level command.com executes the command; all registers
are destroyed as in exec.
-----------------------------------------------------------
INT 2F - Multiplexor - PRINT Installation Check
AX = 0100h
Return: AL =
FFh installed
01h not installed, not OK to install
00h not installed, OK to install
-----------------------------------------------------------
INT 2F - Multiplexor - PRINT Submit file
AX = 0101h
DS:DX -> packet of one byte level and DWORD file pointer
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 2F - Multiplexor - PRINT Remove file
AX = 0102h
DS:DX -> file name (wildcards allowed)
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 2F - Multiplexor - PRINT Remove all files
AX = 0103h
Return: CF = 1 if error
AX = Error Code
-----------------------------------------------------------
INT 2F - Multiplexor - PRINT Hold queue/Get status
AX = 0104h
Return: CF = 1 if error
AX = Error Code
01h function invalid
02h file not found
03h path not found
04h too many open files
05h access denied
08h queue full
09h spooler busy
0Ch name too long
0Fh drive invalid
DX = Error count
DS:SI -> print queue (null-string terminated
list of 64-byte ASCIZ file names)
-----------------------------------------------------------
INT 2F - Multiplexor - PRINT Restart queue
AX = 0105h
Return: Flag CF = 1 if error
AX = Error Code if any
-----------------------------------------------------------
INT 2F - Multiplexor - ASSIGN Installation Check
AX = 0600h
Return: AH <> 0 if installed
-----------------------------------------------------------
INT 2F - Multiplexor - ASSIGN
AX = 0601h XXX
-----------------------------------------------------------
INT 2F - Multiplexor - MSDOS Internal
AH = 10h XXX
-----------------------------------------------------------
INT 2F - Multiplexor - MSDOS Internal
AH = 11h XXX
-----------------------------------------------------------
INT 2F - Multiplexor - MSDOS Internal
AH = 12h XXX
-----------------------------------------------------------
INT 2F - Multiplexor - APPEND Installation Check
AX = B700h
Return: AH <> 0 if installed
-----------------------------------------------------------
INT 2F - Multiplexor - APPEND
AX = B701h XXX
-----------------------------------------------------------
INT 2F - Multiplexor - Network Program Installation Check
AX = B800h
Return: AH <> 0 if installed
-----------------------------------------------------------
INT 2F - Multiplexor - Get Current Post Address
AX = B803h
Return: ES:BX = post address
-----------------------------------------------------------
INT 2F - Multiplexor - Set New Post Address
AX = B804h
ES:BX = new post address
-----------------------------------------------------------
INT 30 -> (NOT A VECTOR!) FAR jump instruction for CP/M-style calls
INT 31
-----------------------------------------------------------
INT 32 -> not used
-----------------------------------------------------------
INT 33 -> USED BY MICROSOFT MOUSE
-----------------------------------------------------------
INT 40 -> Relocated (by fixed disk) Floppy Handler (original INT 13h)
-----------------------------------------------------------
INT 41 -> Fixed Disk Params
dw cylinders
db heads
dw 0
dw write pre-comp
db 0
db 0 "control byte"
db 0, 0, 0
dw landing zone
db sectors/track
db 0
-----------------------------------------------------------
INT 42 -> Relocated (by EGA) Video Handler (original INT 10h)
-----------------------------------------------------------
INT 43 -> EGA Initialization Params
-----------------------------------------------------------
INT 44 -> EGA/PCjr fonts
-----------------------------------------------------------
INT 45 -> reserved
-----------------------------------------------------------
INT 46 -> Secondary Fixed Disk Params (see INT 41h)
-----------------------------------------------------------
INT 47 -> reserved
-----------------------------------------------------------
INT 48 -> PCjr Cordless Keyboard Translation
-----------------------------------------------------------
INT 49 -> PCjr Non-keyboard Scan Code Translation Table
-----------------------------------------------------------
INT 4A -> AT User Alarm
-----------------------------------------------------------
INT 4B -> reserved
-----------------------------------------------------------
INT 4C -> reserved
-----------------------------------------------------------
INT 4D -> reserved
-----------------------------------------------------------
INT 4E -> reserved
-----------------------------------------------------------
INT 4F -> reserved
-----------------------------------------------------------
INT 50-57 -> IRQ0-IRQ7 relocated by DESQview
-----------------------------------------------------------
INT 58 -> reserved
-----------------------------------------------------------
INT 59 -> reserved
-----------------------------------------------------------
INT 5A -> reserved
-----------------------------------------------------------
INT 5B -> reserved
-----------------------------------------------------------
INT 5C - NETBIOS interface
ES:BX -> Network Control Block
-----------------------------------------------------------
INT 5D -> reserved
-----------------------------------------------------------
INT 5E -> reserved
-----------------------------------------------------------
INT 5F -> reserved
-----------------------------------------------------------
INT 60-67 -> reserved for user interrupts
-----------------------------------------------------------
INT 67 - LIM EMS - Get Manager Status
AH = 40h
Return: AH = status
00h successful
80h internal error
81h hardware malfunction
84h undefined function requested by application
Note: this call can be used only after establishing that the EMS driver
is in fact present
-----------------------------------------------------------
INT 67 - LIM EMS - Get Page Frame Segment
AH = 41h
Return: AH = 00h function successful
BX = segment of page frame
AH = error code (see AH=40h above)
-----------------------------------------------------------
INT 67 - LIM EMS - Get Number of Pages
AH = 42h
Return: AH = 00h function successful
BX = number of unallocated pages
DX = total number of pages
AH = error code (see AH=40h above)
-----------------------------------------------------------
INT 67 - LIM EMS - Get Handle and Allocate Memory
AH = 43h
BX = number of logical pages to allocate
Return: AH = status
00h function successful
DX = handle
80h internal error
81h hardware malfunction
84h undefined function requested
85h no more handles available
87h more pages requested than physically exist
88h more pages requested than currently available
89h zero pages requested
-----------------------------------------------------------
INT 67 - LIM EMS - Map Memory
AH = 44h
AL = physical page number (0-3)
BX = logical page number
DX = handle
Return: AH = status
00h function successful
80h internal error
81h hardware malfunction
83h invalid handle
84h undefined function requested
8Ah invalid logical page number
8Bh illegal physical-page number
-----------------------------------------------------------
INT 67 - LIM EMS - Release Handle and Memory
AH = 45h
DX = EMM handle
Return: AH = status
00h successful
80h internal error
81h hardware malfunction
83h invalid handle
84h undefined function requested
86h error in save or restore of mapping context
-----------------------------------------------------------
INT 67 - LIM EMS - Get EMM Version
AH = 46h
Return: AH = status
00h successful
AL = EMM version number
80h internal error
81h hardware malfunction
84h undefined function requested
-----------------------------------------------------------
INT 67 - LIM EMS - Save Mapping Context
AH = 47h
DX = handle
Return: AH = status
00h successful
80h internal error
81h hardware malfunction
83h invalid handle
84h undefined function requested
8Ch page-mapping hardware state save area is full
8Dh save of mapping context failed
-----------------------------------------------------------
INT 67 - LIM EMS - Restore Maping Context
AH = 48h
DX = handle
Return: AH = status
00h successful
80h internal error
81h hardware malfunction
83h invalid handle
84h undefined function requested
8Eh restore of mapping context failed
-----------------------------------------------------------
INT 67 - LIM EMS - reserved
AH = 49h
Note: defined in EMS 3.0, but undocumented in EMS 3.2
-----------------------------------------------------------
INT 67 - LIM EMS - reserved
AH = 4Ah
Note: defined in EMS 3.0, but undocumented in EMS 3.2
-----------------------------------------------------------
INT 67 - LIM EMS - Get Number of EMM Handles
AH = 4Bh
Return: AH = status
00h successful
BX = number of EMM handles
80h internal error
81h hardware malfunction
83h invalid handle
84h undefined function requested
-----------------------------------------------------------
INT 67 - LIM EMS - Get Pages Owned by Handle
AH = 4Ch
DX = EMM handle
Return: AH = status
00h successful
BX = number of logical pages
80h internal error
81h hardware malfunction
83h invalid handle
84h undefined function requested
-----------------------------------------------------------
INT 67 - LIM EMS - Get Pages for All Handles
AH = 4Dh
ES:DI = pointer to array to receive information
Return: AH = status
00h successful
BX = number of active EMM handles
array filled with 2-word entries, consisting of a handle
and the number of pages allocated to that handle
80h internal error
81h hardware malfunction
84h undefined function requested
-----------------------------------------------------------
INT 67 - LIM EMS - Get or Set Page Map
AH = 4Eh
AL = 00h if getting mapping registers
01h if setting mapping registers
02h if getting and setting mapping registers at once
03h if getting size of page-mapping array
DS:SI = pointer to array holding information (AL=01/02)
ES:DI = pointer to array to receive information (AL=00/02)
Return: AH = status
00h successful
AL = bytes in page-mapping array (subfunction 03h only)
array pointed to by ES:DI receives mapping info (AL=00/02)
80h internal error
81h hardware malfunction
84h undefined function requested
8Fh undefined subfunction parameter
A3h contents of source array corrupted (EMS 4.0?)
Note: this function was designed to be used by multitasking operating systems
and should not ordinarily be used by appplication software.
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Get/Set Partial Page Map
AH = 4Fh
AL = subfunction
00h get partial page map
DS:SI = pointer to structure containing list of segments whose
mapping contexts are to be saved
ES:DI = pointer to array to receive page map
01h set partial page map
DS:SI = pointer to structure containing saved partial page map
02h get size of partial page map
BX = number of mappable segments in the partial map to be saved
Return: AH = status
00h successful
80h internal error
81h hardware malfunction
84h undefined function requested
8Bh one of specified segments is not mappable
8Fh undefined subfunction parameter
A3h contents of partial page map corrupted or count of mappable
segments exceeds total number of mappable segments in system
AL = size of partial page map for subfunction 02h
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Map/Unmap Multiple Handle Pages
AH = 50h
AL = subfunction
00h
01h
DX = handle
CX = number of entries in array
DS:SI = pointer to mapping array
Return: AH = status
00h successful
80h internal error
81h hardware malfunction
83h invalid handle
84h undefined function requested
8Ah one or more logical pages are invalid
8Bh one or more physical pages are invalid
8Fh invalid subfunction
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Reallocate Pages
AH = 51h
DX = handle
BX = number of pages to be allocated to handle
Return: BX = actual number of pages allocated to handle
AH = status
00h successful
80h internal error
81h hardware malfunction
83h invalid handle
84h undefined function requested
87h more pages requested than present in system
88h more pages requested than currently available
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Get/Set Handle Attributes
AH = 52h
AL = subfunction
00h get handle attributes
01h set handle attributes
BL = new attribute (see returned AL)
02h get attribute capability
DX = handle
Return: AL = attribute (for subfunction 00h)
00h handle is volatile
01h handle is nonvolatile
AL = attribute capability (for subfunction 02h)
00h only volatile handles supported
01h both volatile and non-volatile supported
AH = status
00h successful
80h internal error
81h hardware malfunction
83h invalid handle
84h undefined function requested
8Fh undefined subfunction
90h undefined attribute type
91h feature not supported
AH = 53h
AL = subfunction
00h get handle name
ES:DI = pointer to 8-byte handle name array
01h set handle name
DS:SI = pointer to 8-byte handle name
DX = handle
Return: AH = status
00h successful
80h internal error
81h hardware malfunction
83h invalid handle
84h undefined function requested
8Fh undefined subfunction
A1h duplicate handle name
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Get Handle Directory
AH = 54h
AL = subfunction
00h get handle directory
ES:DI = pointer to buffer for handle directory
01h search for named handle
DS:SI = pointer to 8-byte name
02h get total number of handles
Return: AL = number of entries in handle directory (subfunction 00h)
DX = value of named handle (subfunction 01h)
BX = total number of handles (subfunction 02h)
AH = status
00h successful
80h internal error
81h hardware malfunction
84h undefined function requested
8Fh undefined subfunction
A0h no such handle name
A1h a handle found had no name
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Alter Page Map and Jump
AH = 55h
AL = subfunction
00h physical page numbers provided by caller
01h segment addresses provided by caller
DX = handle
DS:SI = pointer to structure containing map and jump address
Return: (at target address unless error)
AH = status
00h successful
80h internal error
81h hardware failure
83h invalid handle
84h undefined function requested
8Ah invalid logical page number encountered
8Bh invalid physical page number encountered
8Fh invalid subfunction
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Alter Page Map and Call
AH = 56h
AL = subfunction
00h physical page numbers provided by caller
DX = handle
DS:SI = pointer to structure containing page map and call address
01h segment addresses provided by caller
DX = handle
DS:SI = pointer to structure containing page map and call address
02h get page map stack space required
Return: (if successful, the target address is called. Use a RETF to return and
restore mapping context)
BX = stack space required (subfunction 02h)
AH = status
00h successful
80h internal error
81h hardware failure
83h invalid handle
84h undefined function requested
8Ah invalid logical page number encountered
8Bh invalid physical page number encountered
8Fh undefined subfunction
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Move/Exchange Memory Region
AH = 57h
AL = subfunction
00h move memory region
01h exchange memory region
DS:SI = pointer to structure describing source and destination
Return: AH = status
00h successful
80h internal error
81h hardware failure
83h invalid handle
84h undefined function requested
8Ah invalid logical page number encountered
8Fh undefined subfunction
92h successful, but a portion of the source region has been
overwritten
93h length of source or destination region exceeds length of region
allocated to either source or destination handle
94h conventional and expanded memory regions overlap
95h offset within logical page exceeds size of logical page
96h region length exceeds 1M
97h source and destination EMS regions have same handle and overlap
98h memory source or destination type undefined
A2h attempted to wrap around 1M conventional address space
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Get Mappable Physical Address Array
AH = 58h
AL = subfunction
00h get mappable physical address array
ES:DI = pointer to buffer to be filled with array
01h get number of entries in m.p.a. array
Return: CX = number of entries in array
AH = status
00h successful
80h internal error
81h hardware failure
84h undefined function requested
8Fh undefined subfunction
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Get Expanded Memory Hardware Information
AH = 59h
AL = subfunction
00h get hardware configuration array
ES:DI = pointer to buffer to be filled with array
01h get unallocated raw page count
Return: BX = unallocated raw pages (subfunction 01h)
DX = total raw pages (subfunction 01h)
AH = status
00h successful
80h internal error
81h hardware failure
84h undefined function requested
8Fh undefined subfunction
A4h access denied by operating system
Note: subfunction 00h is for use by operating systems only, and can be
enabled or disabled at any time by the operating system
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Allocate Standard/Raw Pages
AH = 5Ah
AL = subfunction
00h allocate standard pages
01h allocate raw pages
BX = number of pages to allocate
Return: DX = handle
AH = status
00h successful
80h internal error
81h hardware failure
84h undefined function requested
85h no more handles available
87h insufficient memory pages in system
88h insufficient memory pages available
8Fh undefined subfunction
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Alternate Map Register Set
AH = 5Bh
AL = subfunction
00h get alternate map register set
01h set alternate map register set
BL = new alternate map register set number
ES:DI = pointer to map register context save area if BL=0
02h get alternate map save array size
03h allocate alternate map register set
04h deallocate alternate map register set
BL = number of alternate map register set
Return: BL = current active alternate map register set number if nonzero (AL=0)
ES:DI = pointer to a map register context save area if BL=0 (AL=0)
DX = array size in bytes (subfunction 02h)
BL = number of alternate map register set; zero if not supported (AL=3)
AH = status
00h successful
80h internal error
81h hardware malfunction
84h undefined function requested
8Fh undefined subfunction
9Ah specified alternate map register set not supported
9Bh all alternate map register sets currently allocated
9Ch alternate map register sets not supported
9Dh undefined or unallocated alternate map register set
A3h source array corrupted
A4h operating system denied access
Note: this function is for use by operating systems only, and can be
enabled or disabled at any time by the operating system
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Alternate Map Register Set - DMA registers
AH = 5Bh
AL = subfunction
05h allocate DMA register set
06h enable DMA on alternate map register set
BL = DMA register set number
DL = DMA channel number
07h disable DMA on alternate map register set
BL = DMA register set number
08h deallocate DMA register set
BL = DMA register set number
Return: BL = DMA register set number; zero if not supported (subfunction 05h)
AH = status
00h successful
80h internal error
81h hardware malfunction
84h undefined function requested
8Fh undefined subfunction
9Ah specified DMA register set not supported
9Bh all DMA register sets currently allocated
9Ch alternate DMA sets not supported
9Dh undefined or unallocated DMA register set
9Eh dedicated DMA channels not supported
9Fh specified dedicated DMA channel not supported
A3h source array corrupted
A4h operating system denied access
Note: this function is for use by operating systems only, and can be
enabled or disabled at any time by the operating system
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Prepare Expanded Memory Hardware for Warm Boot
AH = 5Ch
Return: AH = status
00h successful
80h internal error
81h hardware malfunction
84h undefined function requested
-----------------------------------------------------------
INT 67 - LIM EMS 4.0 - Enable/Disable OS Function Set Functions
AH = 5Dh
AL = subfunction
00h enable OS Function Set
01h disable OS Function Set
02h return access key (resets memory manager, returns access key at
next invocation)
BX,CX = access key returned by first invocation
Return: BX,CX = access key, returned only on first invocation of function
AH = status
00h successful
80h internal error
81h hardware malfunction
84h undefined function requested
8Fh undefined subfunction
A4h operating system denied access
-----------------------------------------------------------
INT 68 -> unused
-----------------------------------------------------------
INT 69 -> unused
-----------------------------------------------------------
INT 6A -> unused
-----------------------------------------------------------
INT 6B -> unused
-----------------------------------------------------------
INT 6C -> unused
-----------------------------------------------------------
INT 6D -> unused
-----------------------------------------------------------
INT 6E -> unused
-----------------------------------------------------------
INT 6F -> unused
-----------------------------------------------------------
INT 70 thru 77 - AT Vectored Hardware Lines
IRQ8 - real-time clock
IRQ9 - LAN adapter 1 (rerouted to INT 0Ah by BIOS)
IRQ10 - reserved
IRQ11 - reserved
IRQ12 - reserved
IRQ13 - 80287 error (rerouted to INT 2 by BIOS)
IRQ14 - fixed disk
IRQ15 - reserved
-----------------------------------------------------------
INT 86 - Relocated (by NETBIOS) INT 18
-----------------------------------------------------------
INT E4 - Logitech Modula v2.0 - MonitorEntry
AX = 5
BX = priority
-----------------------------------------------------------
INT E4 - Logitech Modula v2.0 - MonitorExit
AX = 6
-----------------------------------------------------------
INT F8 - INTERVAL TIMER (10 MSEC)
-----------------------------------------------------------
INT FA - USART READY (RS-232C)
-----------------------------------------------------------
INT FB - USART Rx READY (keyboard)
-----------------------------------------------------------